Vorwort
Es gibt viele Möglichkeiten, Instanzen im Frühjahr zu injizieren, aber aufgrund der unterschiedlichen Initialisierungsreihenfolge ist die auf der Annotation basierende Injektionsmethode anfällig dafür, dass sie nicht korrekt erfolgreich injiziert werden.
In diesem Artikel wird eine dynamisch basierte Möglichkeit eingeführt, mit federleiteten Bohnen in realen Projekten zu extrahieren. Ich werde unten nicht viel sagen. Schauen wir uns die detaillierte Einführung zusammen an.
1. Inject Instances basierend auf der Kennzeichnung
Wenn die Bohne initialisiert wird, muss das Objekt, von dem es abhängt, initialisiert werden. Wenn das injizierte Objekt später als das aktuelle Objekt initialisiert wird, ist das injizierte Objekt null.
1.1 @autowired
Laden Sie die Federbohnen nach Typ. Standardmäßig muss seine Bohne existieren. Wenn seine Bohne null ist, kann die erforderliche Eigenschaft auf false eingestellt werden. Weitere Informationen finden Sie im Quellcode:
@Target ({Elementtype.Constructor, elementtype.method, elementtype.parameter, elementtype.field, elementtype.Annotation_type})@retention (retentionPolicy.runtime)@documentedPublic@interface autowired {/*** *** Die annotierte Abhängigkeit ist erforderlich. *Standardmäßig {@code true}.*/Boolean fordert () Standard true;}Wenn Sie eine Bean basierend auf einem Befehl injizieren müssen, müssen Sie @Qualifier verwenden, um den Namen zu kennzeichnen. Das Codebeispiel lautet wie folgt:
@Autrired@qualifier ("BeAnName") Private BeanType Beanobj;Anwendungsumfang: Über Variablen, Settermethoden und Konstruktoren.
Quelle: Spring Framework
1.2 @inject
Bereitgestellt von javax.inject.inject, wird es automatisch basierend auf dem Typ zusammengestellt. Wenn Sie nach dem Namen übertragen müssen, müssen Sie @named in Verbindung damit verwenden. Diese Verwendung ist @autowired im Spring -Framework sehr ähnlich.
Anwendungsumfang: Variablen, Settermethoden, Konstruktoren
Quelle: JSR330 Spezifikation Javax Extension Package
Codebeispiel:
@Inject@named ("Beanname") Private BeanType Bean;1.3 @Resource
Die Standardeinstellung ist die Montageeinspritzung mit Namen. Nur wenn der Bean -Matching der Name nicht gefunden werden kann, wird die Injektion nach Typ. Es wird nach JDK 1.6 bereitgestellt.
Anwendungsumfang: Kann auf Variablen und Settermethoden angewendet werden
Quelle: bereitgestellt nach JDK 1.6
Beispiel für Code -Nutzung:
@Resource (name = "mybeAnname") Private BeanType Bean;
2. Dynamische Injektionsmethode
Idee: Verwenden Sie applicationContextaware, um die Referenz von ApplicationContext zu erhalten, und erhalten Sie das Objekt dann dynamisch basierend auf ApplicationContext.
Der Implementierungscode lautet wie folgt:
@ComponentPublic Class SpringContextil implementiert applicationContextaware {// Spring Application Context -Umgebung private statische AnwendungsContext ApplicationContext;/** Implementieren Sie die Callback -Methode der ApplicationContextAware -Schnittstelle und setzen Sie die Kontertextumgebung ** @param applicationContext*/public voidContextContext. applicationContext;}/*** @return applicationContext*/public static applicationContext getApplicationContext () {return applicationContext;}/*** Object ** @param name*@return Object*@throwsexception*/public static Object getBean (String Name) löscht Beansexception {{{name {name) {{{name) {{name) {{name) {{name) {{name) {{name) {{name) {{name) {{name) {{name);Danach können Sie die erforderlichen Bean -Instanzen im Code dynamisch erhalten:
BeanType Bean = SpringContextUtil.getbean ("Beanname")Ist es nicht sehr einfach zu bedienen?
Zusammenfassen
Hier fassen wir die verschiedenen Möglichkeiten zusammen, Bohnen in den Frühling zu injizieren, jeweils ihre Vor- und Nachteile, und Sie können sie verwenden.
Okay, das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.