Préface
Il existe de nombreuses façons d'injecter des instances au printemps, mais en raison de l'ordre d'initialisation différent, la méthode d'injection basée sur l'annotation est sujette à l'échec à être correctement injecté avec succès.
Cet article introduira une façon dynamiquement basée sur les haricots à ressort dans des projets réels. Je ne dirai pas beaucoup ci-dessous, jetons un coup d'œil à l'introduction détaillée ensemble.
1. Injecter des instances basées sur l'étiquetage
Lorsque le haricot est initialisé, l'objet dont il dépend doit être initialisé. Si l'objet injecté est initialisé plus tard que l'objet actuel, l'objet injecté sera nul.
1.1 @Autowired
Chargez des haricots à ressort par type. Par défaut, son haricot doit exister. Si son haricot est nul, sa propriété requise peut être réglée sur False. Pour plus de détails, veuillez vous référer au code source:
@Target ({elementType.Constructor, elementType.Method, elementType.Parameter, elementType.field, elementType.annotation_type}) @ rétention (RetensionPolicy.runtime) @ documentedpublic @ interface Autowired {/ ** * Déclate si la dépendance annotée est requise. * Par défaut à {@code true}. * / Booléen requis () par défaut true;}Si vous devez injecter un bean en fonction d'une commande, vous devez utiliser @qualifier pour étiqueter le nom. L'exemple de code est le suivant:
@ Autwired @ Qualifier ("beanname") privé beanType beanoBj;Portée de l'application: Variables ci-dessus, méthodes de secteur et constructeurs.
Source: Spring Framework
1.2 @inject
Fourni par javax.inject.inject, il est automatiquement assemblé en fonction du type. Si vous devez transférer en fonction du nom, vous devez utiliser @Named en conjonction avec lui. Cette utilisation est très similaire à @Autowired fourni par le framework Spring.
Portée de l'application: variables, méthodes de setter, constructeurs
Source: JSR330 Spécification Package d'extension Javax
Exemple de code:
@ Inject @ nommé ("beanname") BeanType privé;1.3 @Resource
La valeur par défaut est l'injection d'assemblage par son nom. Ce n'est que lorsque le haricot correspondant au nom ne peut être trouvé que l'injection par type. Il est fourni après JDK 1.6.
Portée de l'application: peut être appliquée aux variables et aux méthodes de setter
Source: Fourni après JDK 1.6
Exemple d'utilisation du code:
@Resource (name = "MyBeanName") BeanType privé;
2. Méthode d'injection dynamique
Idée: utilisez ApplicationContextAware pour obtenir la référence d'ApplicationContext, puis obtenez dynamiquement l'objet basé sur ApplicationContext.
Le code d'implémentation est le suivant:
@ComponentPublic Class SpringContextUtil implémente ApplicationContextAware {// Spring Application Context Environment Private Static ApplicationContext ApplicationContext; / ** Implémentez la méthode de rappel de l'interface ApplicationContextAware et définissez l'environnement de contexte ** @param ApplicationContext * / public void setApplicationContext (ApplicationContex ApplicationContext * / public static applicationContext getApplicationContext () {return applicationContext;} / *** get objet ** @param name * @return objet * @throws beansexception * / public static objet getBean (String name) lance beansexception {return applicationContext.getBean (name);}}Après cela, vous pouvez obtenir dynamiquement les instances de bean requises dans le code:
Beantype bean = springContextUtil.getBean ("beanname")N'est-ce pas très facile à utiliser?
Résumer
Ici, nous résumons les différentes façons d'injecter des haricots au printemps, chacun avec ses avantages et ses inconvénients, et vous pouvez choisir de les utiliser.
D'accord, ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.