Maison >Java >javaDidacticiel >Structure du projet JAVAEE et réflexions sur la concurrence

Structure du projet JAVAEE et réflexions sur la concurrence

高洛峰
高洛峰original
2017-01-17 11:11:191552parcourir

L'échafaudage qui a longtemps dominé le domaine Javaee est dirigé par spring struts2 mybatis/hibernate

Spring :

Spring n'est pas réservé aux services Java. En tant qu'implémentation du standard cgi, Spring n'est pas seulement un framework dans le domaine Java, la plate-forme C# peut toujours en bénéficier ; Spring fournit diverses méthodes de configuration d'annotations pratiques telles que des solutions d'abstraction ou d'intégration de démarrage, ce qui simplifie grandement les bases des projets Javaee

Dans le processus d'utilisation de Spring, il y a deux côtés : une partie est une annotation légère et l'autre partie est encline à une annotation complète.

Tout d'abord, le principe de l'annotation est qu'elle doit passer par un proxy, dynamique, statique, proxy cglib. Pour les annotations légères, la perspective est celle des annotations statiques ou ponctuelles, telles que les annotations du contrôleur. Ces annotations ponctuelles ou annotations au moment de la compilation sont initialisées dans le contexte du projet en tant qu'analyse ponctuelle implicite. Les annotations de service et autres similaires sont associées. , qui fournissent des instances d'objet léger singleton. Considéré comme le premier choix. Cela réduit le coût des proxys et des réflexions pendant l'exécution et permet d'économiser de meilleures ressources pour la pile pendant l'exécution.

Un autre type est le corps de réponse, qui est une annotation dynamique ou une annotation d'exécution. Chaque fois qu'une requête est effectuée, la réflexion de l'annotation sera exécutée. Les annotations pendant l'exécution occupent naturellement des ressources.

De manière générale, si les annotations ne sont pas nécessaires, elles peuvent être omises. Sur la base des méthodes de requête et de réponse basées sur les servlets, il n'y a aucun problème que MVC ne puisse pas résoudre, tels que la récupération des paramètres, le passage des paramètres, le retour, etc., et il n'y a aucun besoin d'annotations d'exécution, les annotations d'exécution semblent réduire la quantité de code Afin de compenser diverses lacunes de ce processus, un anneau d'annotations dynamiques sera exécuté pour exécuter une annotation que vous avez. utiliser à l’intérieur de la méthode. Pour l'annotation param écrite dans la méthode, quel code manque par rapport à l'utilisation de request get ? Cela ajoute simplement une couche d’interception de code au processus original en une étape.

Comment savoir si une annotation est une annotation d'exécution ou de compilation ? C'est très simple. Cliquez sur Ctrl et vous verrez :

@Target({ElementType.TYPE, ElementType. .METHOD})

@Retention(RetentionPolicy.RUNTIME)

@Documented

Rétention Ce type d'énumération explique complètement et clairement la période de validité de l'annotation que vous utilisez.

Utilisez Spring. Tout le monde aime utiliser des singletons. C'est un excellent moyen. Les singletons n'ont rien à voir avec la concurrence elle-même, sauf que vous devez le laisser provoquer une compétition d'identification des ressources. Il doit y avoir de nombreux objets prototypes dans votre projet, ce qui signifie que vous avez abusé ou utilisé les mauvais objets. MVC prend essentiellement des paramètres et des retours, et une réponse à la demande distincte a ses éléments entrants et sortants complètement isolés. En parlant de mybatis, de nombreuses personnes utilisent différents resmappers dans une configuration de mybatis. À chaque fois, différents beans vont et viennent lorsqu'une demande est faite, les beans en tant que paramètres et résultats doivent être disponibles une fois. Au prix d'une réduction considérable de l'efficacité de jdbc, peu de gens s'en soucient. Ils ne comprennent pas et ne se soucient pas de gc. Lorsque des problèmes surviennent, ils ajoutent de la mémoire. haut La seule solution est le problème : échanger de l'espace contre du temps. Le même mappage de paramètres et de résultats, vous pouvez alors utiliser la carte de jdk pour créer un nouveau bean. Laquelle est la meilleure ? Naturellement, c'est la propre carte de jdk

J'ai toujours obstinément cru que la consommation d'un nouvel objet. de jdk est bien moins que Définir vous-même un bean. Pourquoi, désolé, je ne sais pas non plus. Donc, je planifie toujours pour venir et je planifie toujours pour aller. Lorsque vous utilisez mybatis, vous devez vérifier attentivement si vos éléments sont envoyés par proxy à votre classe. La méthode est très simple. Dans le journal du projet, ouvrez le débogage et voyez si votre journal crée une nouvelle session sql à chaque fois. La session mybatis n'est pas regroupée et n'est pas proxy par des objets. Si un SQL concurrent apparaît dans une méthode, désolé, il n'y a pas d'erreur, mais la base de données n'exécute pas votre SQL. Bientôt, vous constaterez que le pool de connexions est utilisé rapidement et que de nouvelles connexions sont créées fréquemment. Bien sûr, si vous pouvez vous passer de mybatis, n'hésitez pas, c'est bien de ne pas l'utiliser.

Pourquoi devons-nous utiliser des annotations statiques autant que possible ? C'est très simple. Les classes Spring sont essentiellement des singletons Si le projet est suffisamment grand, il y aura suffisamment d'instances de bean. L'instance d'objet se trouve dans l'espace du tas et la référence est dans la pile. Alors, quand gc recyclera-t-il ces objets singleton ? ce que vous pensez? Par conséquent, lorsque vous vous basez sur des annotations, essayez de réduire l’utilisation de proxys dynamiques. Laissez plus de ressources là où elles sont nécessaires.

Dans le passé, nous dirions qu'il n'y a pas de pile sans tas, mais maintenant cela a changé que le pool de constantes de chaîne de jdk1.7 a été placé dans le tas.

Lequel est le meilleur, compilé ou interprété ? Bien sûr, il est analytique, et compilé est similaire à un modèle intermédiaire. Par conséquent, construire un excellent langage compilé est beaucoup plus difficile qu’un langage interprété.

La structure du Web est très claire. Il y a d'abord le contexte, puis une série de composants dans l'ordre. Notre chose la plus importante est le composant servlet, qui est le standard de Javaee. normes que tout le monde doit avoir. Ensuite, vous verrez que le mappage des servlets de nombreux projets est /. C'est une mauvaise méthode car c'est très simple. Il n'est jamais nécessaire que js ou css soient traités via des servlets. Par conséquent, le mappage prend principalement en compte l'interaction avec le serveur. -composants latéraux du conteneur Web. Généralement, deux types d'identification, tels que .do et .action .do nécessitent une authentification par autorisation, l'action est directement libérée. js etc. n'ont pas besoin d'entrer dans le servlet, le contexte Web revient directement en fonction de l'URL, puis il n'y a pas d'interception et de publication MVC dans le MVC, ce qui est inutile, crée des problèmes et n'est pas un bon moyen de résoudre le problème. De cette façon, quelle que soit l'intervention de nginx, vos ressources statiques sont statiques pour le conteneur web et n'ont aucune relation avec le servlet. La servlet ne s'intéresse qu'à ce que vous devez gérer.

Quel est le meilleur endroit pour écrire du js ?

Beaucoup de gens ont l'habitude d'écrire des js en jsp ou en html, ce qui est mauvais.

Lorsque nous construisons un projet, nous devons espérer que nos js et nos css puissent être mis en cache par le navigateur.

Ensuite, le js écrit dans la balise script de la page n'est qu'une balise. Ce n'est pas différent d'un div ou d'une entrée et ne sera pas mis en cache. J'ai vérifié beaucoup d'informations et le cache que j'ai vu est clairement indiqué. l'unité de cache est un fichier. au lieu d'étiquettes. Alors écrivez votre CSS js dans le fichier et importez le fichier afin que le fichier soit mis en cache. Je ne suis pas complètement sûr de cela car il n'y a pas de réponse directe et définitive.

jsp est en fait un servlet, c'est donc une page dynamique. À chaque fois, la classe doit être chargée pour une traduction dynamique, puis la méthode d'écriture de la classe écrit la page en http dans le navigateur, et le navigateur le restitue, si c'est du HTML, alors il est statique. Il ne fait aucun doute qu'il est dynamique et flexible. Puisqu'il s'agit d'un servlet, il s'agit d'un objet Java et diverses balises et méthodes Java sont possibles. Les pages statiques doivent être gérées par vous-même. Il est préférable d'utiliser directement jsp.

Combien de données doivent être chargées en même temps sur la page ?

Si votre page affiche des éléments selon des catégories, selon des listes, la quantité de données est très faible, des centaines d'articles, le type est affiché dans l'application de commande à emporter actuelle, alors toutes les catégories et données sont données à une fois, donc le traitement est géré côté client. Le changement de catégorie et la prévisualisation dans l'ensemble du processus sont tous gérés sur la page, y compris la recherche, le js de notre client, et le js exécuté sur le téléphone mobile ou l'ordinateur de A ne rivalisera pas avec le mobile de B. téléphone ou ordinateur, n'est-ce pas ? , si vous flashez un ajax à chaque fois que vous changez de type, ce sera le même groupe de conteneurs Web, donc il y aura de la concurrence. Plus les opérations sont fréquentes, plus la concurrence est forte. Ce point est étroitement lié au scénario réel.

La quantité de données renvoyées par une requête a peu à voir avec les performances. Des milliers et des dizaines de milliers de données ne se situent qu'au niveau des dizaines de Ko.

Le nombre de requêtes, c'est-à-dire le nombre d'interactions avec le serveur, est la cause directe de la performance globale.

La quantité de données dans une requête est proportionnelle à la taille de la table interrogée. Renvoyer 10 éléments à la fois n'accélérera pas la requête et ne renverra pas 1 000 éléments à la fois, ce qui ralentira la requête. . Les opérations de base de données sont essentiellement des applications de collection et rien n'est créé.

Le principe du réglage est de donner la quantité la plus appropriée. Ce n'est pas que plus vous en donnez, plus elle est appropriée. Il y a une limite supérieure à la mémoire que jdk ou tomcat peuvent consommer sur le système d'exploitation avec. différents chiffres et différents chiffres.

Utilisez nginx ;

Utilisez la mise en cache si nécessaire ;

Choisissez un middleware de messages ou un autre middleware selon que vous en avez besoin

Base de données séparée ou principale Attendez ; , il faut que la base de données actuelle ne puisse pas supporter le volume d'affaires.

Les étuis simples sont le meilleur moyen.

Le multithreading est un couteau bien aiguisé, quelle que soit la langue spécifique.

La gestion Maven est un bon moyen, mais le corps principal de votre projet doit être webmvc. Créez un projet Web et intégrez Maven en tant que composant au lieu de créer un projet Maven puis de le convertir en projet Web, à moins que il est inactif.

Utilisant le ressort, c'est actuellement le meilleur échafaudage.

Utilisez jdbc autant que possible, si possible.

Si vous pouvez faire des choses sur le client, n'interagissez pas avec le serveur. Les ressources du client sont vastes, mais les ressources du serveur sont limitées.

Essayez d'envoyer le moins de requêtes possible. Un code qui envoie moins de requêtes est un bon code, à moins qu'il ne s'agisse d'une application en temps réel.

Chaque outil du code est un outil, et l'API est ce que vous devez le plus comprendre. Il n'y a pas de réponse précise pour savoir lequel est le meilleur et lequel ne l'est pas.

Tout est un objet, ce qui est pur pour Java. Le proxy est un objet, la réflexion est un objet, l'objet est un objet et les types de données de base ne sont pas des objets.

À l'exception des types de base, tout se fait via des objets. Quelle que soit la complexité du processus, cela se fait via les méthodes des objets correspondants combinées avec les paramètres des méthodes. Comment sérialiser et désérialiser une classe. Pour parler franchement, il s'agit de l'E/S et de la transmission de fichiers, puis de leur chargement dans JVM et de leur construction en objets.

La raison pour laquelle rpc est rpc est qu'il n'appelle pas quelque chose dans un thread. La chose appelée est proxy. Le proxy convertit vos besoins en paramètres et les envoie sous forme de flux de données. Le flux est ensuite converti en objet, puis diffusé et renvoyé. Vous construisez ensuite l'objet et le traitez via l'objet.

NIO est un bon moyen, et netty est un bon choix Existe-t-il un socket multithread qui peut surpasser netty ?

zookeeper est un excellent outil pour une série de solutions telles que l'enregistrement distribué.

Ces choses sont des principes plus des objets, il faut donc bien chercher pour les utiliser.

Ce qui précède est ma compréhension personnelle. Les corrections sont les bienvenues.

Pour plus d'articles liés à la structure des projets JAVAEE et aux réflexions sur la concurrence, veuillez prêter attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:8 cadres Java RESTfulArticle suivant:8 cadres Java RESTful