Wenn Sie XML -Dateien verwenden, um in Spring -Konfigurationsdateien zu konfigurieren, fordert Spring tatsächlich auf, den entsprechenden Code auszuführen, zum Beispiel:
Verwenden des <Bohnen> -Elements besteht tatsächlich darin, die Feder das beisparameterierte oder parameterhaltende Konstruktor auszuführen, verwenden
Java -Programme haben jedoch möglicherweise auch andere Arten von Aussagen: Aufrufen von Getter -Methoden, Aufrufen gewöhnlicher Methoden, Zugriff auf Felder von Klassen oder Objekten usw. bietet auch die entsprechende Konfigurationssyntax für solche Anweisungen:
Rufen Sie die Getter -Methode an: Verwenden Sie PropertyPathFactoryBean
Aufrufen des eingereichten Wertes einer Klasse oder eines Objekts: Verwenden Sie die sattelreiche Faktorikbean
Aufrufen einer normalen Methode: Verwenden Sie MethodeInvokingFactoryBean
Injizieren Sie die Eigenschaftswerte anderer Bohnen
PropertyPathFactoryBean wird verwendet, um den Eigenschaftswert der Zielbean zu erhalten (tatsächlich der Wert, der durch Aufrufen der Getter -Methode zurückgegeben wird). Der erhaltene Wert kann in andere Bohnen injiziert werden oder eine neue Bohne kann direkt definiert werden. Siehe die folgende Konfigurationsdatei:
<bean id = "person"> <Eigenschaft name = "Alter" value = "30"/> <Eigenschaft name = "Son"> <!-Verwenden Sie verschachtelte Bohnen, um Eigenschaftswerte zu definieren-> <Bean> <Property name = "Age" value = "11"/> </> </bean> </Property> </bean> <bean id = "Son2". Son2-> <Property name = "AGE"> <!-Beachten
Die Eigenschaften der Klassen von Person und Sohn sind aus der Konfigurationsdatei zu sehen, die nicht mehr angegeben wird. Das Hauptprogramm lautet wie folgt:
public class test {public static void main (String args []) {applicationContext ac = new classPlaPlApplicationContext ("applicationContext.xml"); System.out.println ("ay =" + ac.getbean ("Son2", Son.class) .getage ()); }} Ausgangsergebnis:
Alter = 11
Der Eigenschaftswert einer Bean -Instanz kann nicht nur eine andere Bohne injizieren, sondern auch den Eigenschaftswert der Bean -Instanz als Bean -Instanz direkt definieren. Dies geschieht auch über PropertyPathFactoryBean. Fügen Sie diesen Absatz zur obigen Konfigurationsdatei hinzu:
<bean id = "son1"> <!-bestimmen Sie die Zielbean und geben an, aus welcher Bean die Komponente von Son1 stammt-> <Eigenschaft name = "targetBeanname" value = "Person" /> <!-Bestimmen Sie das Attribut und geben an, welche Eigenschaft von Son1 von-> <Property-Name = "PropertyPath" Value = "Son" /> < /lean> stammt.
Führen Sie die obige Testklasse aus und ersetzen Sie Son2 durch Son1, und das Ergebnis ist das gleiche.
Injizieren Sie den Feldwert anderer Bohnen
Durch die FieldRetrievingFactoryBean -Klasse können Sie die Feldwerte anderer Bohnen in andere Bohnen injizieren oder eine neue Bohne direkt definieren. Hier ist der Konfigurationsclip:
<bean id = "Son"> <Property name = "AGE"> <bean id = "java.sql.connection.transaction_serializable"/> </property> </bean>
Das Haupttestprogramm ähnelt der obigen Definition und wird hier nicht mehr bereitgestellt. Die Ausführungsergebnisse sind wie folgt:
Alter = 8
In dieser Konfiguration entspricht der Wert des Alters des SON -Objekts dem Wert von java.sql.connection.transaction_serializable. In der obigen Definition ist die angegebene ID bei der Definition der Feldrückstände nicht die eindeutige Kennung der Bean -Instanz, sondern der Ausdruck des Feldes (dh der Wert, der herausgenommen wird).
Hinweis: Das Feld kann entweder statisch oder nicht statisch sein. Der durch den oben genannte Konfigurationsausschnitt angegebene Feldausdruck ist ein statischer Feldwert, sodass über den Klassennamen direkt zugegriffen werden kann. Wenn der Feldwert nicht statisch ist, sollte er über die bereits im Behälter vorhandenen Bohnen zugegriffen werden - dh der erste Ausdruck des Feldausdrucks sollte die Bohnen sein, die bereits im Behälter existieren.
Der Feldwert kann auch als Bean -Instanz definiert werden. Fügen Sie beispielsweise den folgenden Absatz zur Konfigurationsdatei hinzu:
<bean id = "ay"> <!-targetClass gibt die Zielklasse an, in der sich das Feld befindet.
Fügen Sie dem Hauptprogramm die folgende Ausgabe hinzu:
System.out.println ("age =" + ac.getbean ("ay"));
Das Ausführungsergebnis ist das gleiche wie oben.
Wenn Sie FieldRetrievingFactoryBean verwenden, um den Feldwert zu erhalten, müssen Sie die folgenden zwei Eigenschaften angeben:
TargetClass oder TargetObject: Wird verwendet, um die Zielakkumulation oder das Zielobjekt anzugeben, an dem sich der Feldwert befindet. Wenn das Feld, das Sie erhalten möchten, statisch ist, verwenden Sie die Zielklasse, um die Zielakkumulation anzugeben. Wenn das Feld nicht statisch ist, verwenden Sie das ZielObject, um das Zielobjekt anzugeben.
Targetfield: Gibt den Feldnamen der Zielklasse oder des Zielobjekts an
Wenn das Feld ein statisches Feld ist, gibt es eine prägnantere Möglichkeit, es zu schreiben:
<bean id = "ay"> <!-Wert Gibt an, welchen statischen Domänenwert welche Klasse-> <Eigenschaft name = "staticfield" value = "java.sql.connection.transaction_serializable" /> < /bean>
Methoden, die andere Bohnen -Return -Werte injizieren
Durch die methodInvokingFactoryBean Factory Bean kann der Rückgabewert der Zielmethode in den Eigenschaftswert der Bean injiziert werden. Diese Werksbohne wird verwendet, um den Rückgabewert der angegebenen Methode zu erhalten. Die Methode kann entweder eine statische Methode oder eine Instanzmethode sein. Dieser Wert kann in das angegebene Attribut der angegebenen Bean -Instanz injiziert oder direkt als Bean -Instanz definiert werden. Siehe Beispiel:
<bean id = "ValueGenerator" /> <bean id = "son1"> <Eigenschaft name = "age"> <!-Methode Return Value: Rufen Sie die GetValue-Methode des ValueGenerators an-> <bean> <Eigenschaft name = "targetObject" Ref = "ValueGenerator" /> <Eigentumsname = "targetMethod".
Hier ist der ValueGenerator:
public class ValueGenerator {public int getValue () {return 2; } public static int getSstaticValue () {return 3;}} Das Testprogramm druckt immer noch den Wert des Alters in Son1, der Code wird weggelassen und das Ergebnis lautet wie folgt:
Alter = 2
Wenn Sie eine statische Methode aufrufen möchten, ändern Sie die Konfiguration auf:
<bean id = "son1"> <Eigenschaft name = "ay"> <!-Methode Return Value: Rufen Sie die GetStaticValue-Methode des ValueGenerators auf-> <bean> <Eigenschaft name = "targetClass" value = "com.abc.util.ValuGenerator"/> <Eigentum name = "targetMethod" Value = "
Die Testergebnisse sind:
Alter = 3
Da Java Überladung unterstützt, reicht nur das Angeben des Method -Namens nicht aus, um zu bestimmen, welche Methode aufgerufen werden soll. Die obige Konfiguration kann erfolgreich aufgerufen werden, da keine Methode im ValueGenerator Parameter hat. Wenn die Methode Parameter enthält, wie konfigurieren Sie es? Geben Sie den folgenden Inhalt in die Konfigurationsdatei ein:
<bean id = "sysProps"> <Eigenschaft name = "targetClass" value = "java.lang.System" /> <Eigenschaft name = "targetMethod" value = "getProperties" /> <bean> <bean id = "javaversion"> <!-auf die oben genannten Sysprops BEANS-> < name = "targetMethod" value = "getProperty"/> <!-Konfigurieren Sie die Parameter hier-> <Eigenschaft name = "Argumente"> <!-Verwenden Sie das Listenelement, um mehrere Parameter der aufrufenden Methode aufzulisten-> <list> <Vote> java.version </value> </list> </property> <Bean> <Bean> <Bean> <Bean> <Bean>
Im obigen Beispiel ist es gleichwertig, die GetProperty -Methode von Java.lang.System mit "Java.Version" als Parameter aufzurufen. Der Rückgabewert erzeugt eine Bean namens Javaversion. Das heißt, entspricht:
javaversion = java.lang.System.getProperty ("java.version");
Wie das Feld im vorherigen Artikel, wenn die zu aufgerufene Methode eine statische Methode ist, gibt es auch eine prägnantere Methode:
<bean id = "mybean"> <!-Verwenden Sie die STATICMETHOD-Eigenschaft, um die Zielmethode der Zielklasse direkt anzugeben-> <Eigenschaft name = "staticMethod" value = "com.abc.util.ValueGenerator.getStaticValue" /> < /bean>
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.