L'utilisation de fichiers XML à configurer dans les fichiers de configuration Spring demande en fait à Spring d'exécuter le code correspondant, par exemple:
L'utilisation de l'élément <an bean> est en fait de laisser Spring exécuter le constructeur non paramètre ou contenant du paramètre Utilisez l'élément <propriété>, en fait pour laisser Spring exécuter la méthode du secteur une fois
Cependant, les programmes Java peuvent également avoir d'autres types d'instructions: appeler des méthodes Getter, appeler des méthodes ordinaires, accéder aux champs de classes ou d'objets, etc. Spring fournit également une syntaxe de configuration correspondante pour ces instructions:
Méthode d'appel: Utilisez PropertyPathFactoryBean
Appel à la valeur déposée d'une classe ou d'un objet: utilisez FileDredrievingFactoryBean
Appel d'une méthode normale: utilisez MethodinVokingFactoryBean
Injecter les valeurs de propriété des autres haricots
PropertyPathFactoryBean est utilisé pour obtenir la valeur de propriété du bean cible (en fait la valeur renvoyée en appelant la méthode Getter). La valeur obtenue peut être injectée dans d'autres haricots, ou un nouveau haricot peut être défini directement. Voir le fichier de configuration suivant:
<bean id = "personne"> <propriété name = "age" value = "30" /> <propriété name = "Son"> <! - Utilisez des haricots imbriqués pour définir les valeurs des propriétés -> <ean> <propriété name = "Age" value = "11" /> </Ean> </premy> </EAND> <bean id = "Son2"> <! - La propriété de l'âge n'est pas injectée directement, mais attribue la propriété de l'âge de l'âge de l'âge de l'âge de FONCE - FONCTIONNEMENTS, mais a été injecté directement, mais attribue la propriété de l'âge de l'âge de l'âge de l'âge de Fon2 - Forced> Proceway name = "Age"> <! - Notez que le PropertyPathFactoryBean est utilisé ici -> <bean id = "Person.son.age" /> </ Property> </-bean>
Les propriétés des classes de personne et de fils peuvent être vues à partir du fichier de configuration, qui n'est plus donné. Le programme principal est le suivant:
public class test {public static void main (String args []) {applicationContext ac = new classPathxmlApplicationContext ("applicationContext.xml"); System.out.println ("Age =" + ac.getBean ("Son2", Son.class) .getage ()); }} Résultat de sortie:
Âge = 11
La valeur de propriété d'une instance de haricot peut non seulement injecter un autre haricot, mais également définir directement la valeur de propriété de l'instance de haricot sous forme d'instance de haricot. Cela se fait également via PropertyPathFactoryBean. Ajoutez ce paragraphe au fichier de configuration ci-dessus:
<bean id = "Son1"> <! - Déterminez le bean cible, indiquant quel bean le composant de Son1 vient de -> <propriété name = "cibleBeanName" value = "personne" /> <! - Déterminez l'attribut, indiquant quelle propriété de Son1 vient -> <propriété name = "PropertyPath" value = "Son" /> </ean>
Exécutez la classe de test ci-dessus et remplacez SON2 par SON1, et le résultat est le même.
Injecter la valeur du champ des autres haricots
Grâce à la classe FielDretrievingFactoryBean, vous pouvez injecter les valeurs de champ d'autres haricots dans d'autres haricots, ou vous pouvez définir directement un nouveau haricot. Voici le clip de configuration:
<bean id = "Son"> <propriété name = "Age"> <bean id = "java.sql.connection.transaction_serializable" /> </ propriété> </ bean>
Le programme de test principal est similaire à la définition ci-dessus et n'est plus fourni ici, et les résultats de l'exécution sont les suivants:
Âge = 8
Dans cette configuration, la valeur de l'âge de l'objet SON est égale à la valeur de java.sql.connection.transaction_serializable. Dans la définition ci-dessus, lors de la définition du bean d'usine FielDretrievingFactoryBean, l'ID spécifié n'est pas l'identifiant unique de l'instance de bean, mais l'expression du champ (c'est-à-dire la valeur à éliminer).
Remarque: le champ peut être statique ou non statique. L'expression de champ spécifiée par l'extrait de configuration ci-dessus est une valeur de champ statique, donc il peut être accessible directement via le nom de classe. Si la valeur du champ est non statique, elle doit être accessible via les haricots qui existent déjà dans le conteneur - c'est-à-dire que la première phrase de l'expression du champ devrait être les haricots qui existent déjà dans le conteneur.
La valeur de champ peut également être définie comme une instance de bean, par exemple, ajouter le paragraphe suivant au fichier de configuration:
<bean id = "Age"> <! - TargetClass spécifie la classe cible où le champ est situé -> <propriété name = "TargetClass" value = "java.sql.connection" /> <! - TargetField spécifie le nom de champ -> <propriété name = "TargetField" value = "transaction_serializable" /> </ bean>
Ajoutez la sortie suivante au programme principal:
System.out.println ("age =" + ac.getBean ("Age"));
Le résultat de l'exécution est le même que ci-dessus.
Lorsque vous utilisez FielDretrievingFactoryBean pour obtenir une valeur de champ, vous devez spécifier les deux propriétés suivantes:
TargetClass ou TargetObject: utilisé pour spécifier l'accumulation cible ou l'objet cible où se trouve la valeur de champ. Si le champ que vous souhaitez obtenir est statique, utilisez TargetClass pour spécifier l'accumulation cible; Si le champ est non statique, utilisez TargetObject pour spécifier l'objet cible.
TargetField: spécifie le nom de champ de la classe cible ou de l'objet cible
Si le champ est un champ statique, il existe un moyen plus concis de l'écrire:
<bean id = "Age"> <! - La valeur spécifie quelle valeur de domaine statique de quelle classe -> <propriété name = "statifield" value = "java.sql.connection.transaction_serializable" /> </ank>
Méthodes qui injectent d'autres valeurs de retour des haricots
Grâce à la méthodeinveokingfactoryBean Factory Bean, la valeur de retour de la méthode cible peut être injectée dans la valeur de propriété du haricot. Ce bean d'usine est utilisé pour obtenir la valeur de retour de la méthode spécifiée. La méthode peut être une méthode statique ou une méthode d'instance; Cette valeur peut être injectée dans l'attribut spécifié de l'instance de bean spécifiée ou directement définie comme une instance de bean. Voir l'exemple:
<bean id = "valueGenerator" /> <bean id = "Son1"> <propriété name = "Age"> <! - Get Method Return Value: Appelez la méthode getValue de ValueGenerator -> <Eban> <propriété Name = "TargetObject" Ref = "ValueGenerator" /> <propriété Name = "TargetMethod" valu
Voici le ValueGenerator:
classe publique ValueGenerator {public int getValue () {return 2; } public static int getStaticValue () {return 3;}} Le programme de test imprime toujours la valeur de l'âge dans SON1, le code est omis et le résultat est le suivant:
Âge = 2
Si vous souhaitez appeler une méthode statique, modifiez la configuration à:
<bean id = "Son1"> <propriété name = "Age"> <! - Get Method Return Value: Appelez la méthode GetStaticValue de ValueGenerator -> <Ean> <propriété name = "TargetClass" value = "com.abc.util.valueGenerator" /> <propriété name = "Property> </ bean>
Les résultats des tests sont:
Âge = 3
Étant donné que Java prend en charge la surcharge, le fait de donner le nom de la méthode ne suffit pas pour déterminer la méthode à appeler. La configuration ci-dessus peut être appelée avec succès car aucune méthode dans ValueGenerator n'a de paramètres. S'il y a des paramètres dans la méthode, comment le configurer? Incluez le contenu suivant dans le fichier de configuration:
<bean id = "sysprops"> <propriété name = "targetclass" value = "java.lang.system" /> <propriété name = "cibleMethod" value = "getProperties" /> <ean> <bean id = "javaversion"> <! - Point à la sysprops ci-dessus -> <propriété name = "TargetOject" value = "sysprops" /> <propriété = " Value = "GetProperty" /> <! - Configurez les paramètres ici -> <propriété name = "arguments"> <! - Utilisez l'élément de liste pour répertorier plusieurs paramètres de la méthode d'appel -> <s list> <value> java.version </value> </sist> </ propriété> <an bean>
Dans l'exemple ci-dessus, il équivaut à appeler la méthode GetProperty de java.lang.System avec "java.version" comme paramètre. La valeur de retour créera un haricot nommé Javaversion. C'est-à-dire équivalent à:
javaversion = java.lang.system.getProperty ("java.version");
Comme le champ dans l'article précédent, si la méthode à appeler est une méthode statique, il existe également une méthode plus concise:
<bean id = "MyBean"> <! - Utilisez la propriété StaticMethod pour spécifier directement la méthode cible de la classe cible -> <propriété name = "staticMethod" value = "com.abc.util.valueGenerator.getStaticValue" /> </ bean>
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.