"Spring Volume 18 de "Interview Eight-Part Essay" est de nouveau sorti. Cette fois, j'ai trié les questions d'entretien sur le printemps. J'ai également parcouru les questions d'entretien sur le printemps en ligne et les ai résumées. En gros, elles sont ici. Bien sûr, il peut y avoir des concepts trop basiques que j'ai directement organisés dans une certaine question, donc je n'ai pas ouvert de question distincte. Je souhaite à tout le monde un bon entretien ~
1. utilisé au printemps ?
2. Quels sont les modules de base au printemps ?
3. Qu'entendez-vous par IOC
4.
5. Quelle est la différence entre BeanFactory et FactoryBean
6. Alors, qu'est-ce que DI ?
8. Qu'est-ce que l'AOP ?
9. Quelle est la différence entre le proxy dynamique et le proxy statique
10. Quelle est la différence entre le proxy dynamique JDK et le proxy CGLIB ?
11.Quelle est la différence entre Spring AOP et AspectJ AOP ?
12. Quel est le cycle de vie de Bean au printemps ?
13. Comment Spring résout-il les dépendances circulaires
14. le résoudre ?
15.Quelle est la différence entre @Autowired et @Resource ?
16.Quels sont les niveaux d'isolement des transactions de Spring ?
17.Quels sont les mécanismes de propagation des transactions Spring ?
18.springBoot principe d'assemblage automatique ?
Alors pourquoi "Quelle est la nécessité d'une inversion de contrôle" ?
Imaginons que sans inversion de contrôle, nous devons "créer des objets et configurer les objets nous-mêmes", et aussi "gérer manuellement des objets et des objets Divers dépendances complexes entre elles", lorsqu'un projet passe à l'échelle, le maintien de cette relation est très gênant, il y a donc la notion d'inversion de contrôle, qui combine la création et la configuration d'objets, etc. Une série d'opérations sont gérés au printemps. Lorsque nous les utilisons, il nous suffit de les récupérer. 4. Que sont les conteneurs IOC au printemps ? Quelles sont les différences
"ApplicationContext"La différence entre eux est que BeanFactory "fournit uniquement les fonctions les plus basiques d'instanciation d'objets et d'obtention d'objets", ApplicationContext est un produit dérivé de BeanFactory et est une sous-classe de celui-ci. Sa fonction est plus puissante, comme la prise en charge de l'injection d'annotations, de l'internationalisation et d'autres fonctions
5 Quelle est la différence entre BeanFactory et FactoryBean ?
"BeanFactory est un conteneur IOC", qui est utilisé pour transporter des objets
"FactoryBean est une interface", qui offre une manière plus flexible pour Bean En proxy un objet Bean, certaines opérations sont effectuées avant et après. la méthode.
6. Quelles sont les différences entre @Repository, @Service, @Compent et @Controller
DI est une injection de dépendance. En fait, c'est à peu près la même chose qu'IOC, mais "Le même concept est expliqué sous différents angles"
Ce que DI décrit. "Le point, ce sont les dépendances", nous avons dit"La fonction principale d'IOC est de fournir dynamiquement d'autres objets dépendants à un objet lorsque le programme est en cours d'exécution", et cette fonction est accomplie par DI. Par exemple, nous devons injecter. un objet A, et cet objet A dépend d'un objet B, alors nous devons injecter cet objet B dans l'objet A. Il existe trois méthodes d'injection dans Spring Injection de constructeur. injection
L'implémentation d'AOP au printemps est "implémentée via un proxy dynamique" Si l'interface est implémentée, le proxy dynamique JDK sera utilisé, sinon le proxy CGLIB sera utilisé.
"Il existe 5 types de notification :"
"Proxy statique"
."Procuration dynamique"
Classe métier proxy dynamique JDK "doit implémenter une certaine interface" , qui est "implémentée sur la base d'un mécanisme de réflexion" Elle génère une classe proxy qui implémente la même interface, puis réécrit la méthode. apporter des améliorations au code.
Le proxy dynamique CGLIB utilise le framework de traitement de bytecode ASM. Son principe est d'utiliser la technologie du bytecode pour "créer une sous-classe pour une classe puis remplacer la méthode de la classe parent" pour améliorer le code.
"Implémentation du proxy dynamique"
AspectJ AOP est une amélioration au moment de la compilation, qui nécessite un compilateur spécial pour être complétée et est obtenue grâce à"modification du code" , Support "trois méthodes de tissage"
Différence principale | Spring AOP | AspecjtJ AOP |
---|---|---|
Méthode d'amélioration | Amélioration du temps d'exécution | Amélioration du temps de compilation |
Méthode d'implémentation | Procuration dynamique | Code de modification |
Compilateur | javac | Compilateur spécial ajc |
efficacité | inférieure (performances de perte de réflexion à l'exécution) | plus élevée |
méthode de tissage | runtime | Temps de compilation, après compilation, temps de chargement des classes |
Le cycle de vie du SpringBean est grossièrement divisé en 4 étapes :
La dépendance circulaire signifie que deux objets dépendent l'un de l'autre, formant un lien d'appel circulaire
spring utilise le cache de troisième niveau pour résoudre la dépendance circulaire. Sa logique de base est de séparer les étapes d'instanciation et d'initialisation, puis de les mettre dans le cache pour les appeler par un autre objet Lorsqu'une référence circulaire se produit entre les classes A et B Processus approximatif spring Il y a deux conditions préalables pour résoudre les dépendances circulaires : Oui, la fonction du cache de troisième niveau est de générer des objets proxy à l'avance ? uniquement lorsque des dépendances circulaires se produisent réellement, sinon il ne fera que "créer une usine et la mettre dans le cache de troisième niveau", mais il ne créera pas réellement d'objets via cette usine. Si vous utilisez le cache de deuxième niveau pour résoudre les dépendances circulaires, cela signifie que tous les beans doivent compléter le proxy AOP après l'instanciation, ce qui "viole les principes de conception de Spring" Spring est conçu à la dernière étape du Bean. cycle de vie pour terminer le proxy AOP au lieu d'effectuer le proxy AOP immédiatement après l'instanciation. "@Resource est la propre annotation de Java", @Resource a deux attributs qui sont plus importants, à savoir le nom et le type ; Spring résout l'attribut name de l'annotation @Resource en nom du bean et l'attribut type en type de bean. Ainsi, si l'attribut name est utilisé, la stratégie d'injection automatique byName est utilisée, et lorsque l'attribut type est utilisé, la stratégie d'injection automatique byType est utilisée. Si ni l'attribut name ni l'attribut type ne sont spécifiés, la stratégie d'injection automatique byName sera utilisée via le mécanisme de réflexion. "@Autowired est une annotation de spring", qui a été introduite dans la version spring2.5, n'injecte qu'en fonction du type, "ne correspondra pas au nom". Si le type ne peut pas identifier l'objet injecté, il doit être décoré avec des annotations @Qualifier ou @Primary.
14. Pourquoi utiliser le cache de troisième niveau ? Le cache de deuxième niveau ne peut-il pas le résoudre
15. Quelle est la différence entre @Autowired et @Resource ?
1.
「propagation_required」
et filtrez. certains dont nous n'avons pas besoin. Qualified Bean
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!