Comment faire printemps injecter de la valeur dans un champ statique
Je sais que cela ressemble à un déjà posé la question mais je suis confronté à un problème différent ici.
J'ai une classe utilitaire qui n'a que des méthodes statiques. Je n'ai pas et je ne vais pas prendre un exemple, à partir d'elle.
public class Utils{
private static Properties dataBaseAttr;
public static void methodA(){
}
public static void methodB(){
}
}
Maintenant, j'ai besoin de Printemps pour remplir dataBaseAttr avec les attributs de base de données de Propriétés.Printemps config est:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<util:properties id="dataBaseAttr"
location="file:#{classPathVariable.path}/dataBaseAttr.properties" />
</beans>
Je l'ai déjà fait dans d'autres haricots, mais le problème ici, dans cette classe (Utils) n'est pas un haricot, Et si je le fais, un haricot, rien ne change, je ne peux toujours pas utiliser la variable depuis la classe ne sera pas instancié et variable est toujours égal à null.
Vous devez vous connecter pour publier un commentaire.
Vous avez deux possibilités:
org.springframework.les haricots.usine.config.MethodInvokingFactoryBean
d'invoquer un statique setter.Dans la première option que vous avez un haricot avec un setter mais au lieu paramètre une instance de la propriété vous définissez la propriété statique/champ.
mais pour ce faire, vous devez disposer d'une instance d'un bean qui va exposer ce setter (son plus comme un solution de contournement).
Dans le second cas, il serait fait comme suit:
Sur vous cas vous allez ajouter un nouveau setter de la
Utils
classe:et dans votre contexte, vous devrez le configurer avec l'approche illustrée ci-dessus, plus ou moins comme:
staticMethod
? Laquelle des 2 blocs de code à utiliser pour le 2ème choix?staticMethod
est une propriété deMethodInvokingFactoryBean
et est configuré avec le complet statique nom de la méthode, qui seront appelés avec les arguments fournis à la propriétéargument
.J'ai eu une demande similaire: j'ai eu besoin d'injecter un Printemps réussi référentiel fève dans ma
Person
classe d'entité ("entité", comme dans "quelque chose avec une identité", par exemple, une entité JPA). UnPerson
exemple, a des amis, et pour cettePerson
exemple de retour de ses amis, il doit déléguer à son référentiel et d'interroger des amis là-bas..
Alors, comment ai-je injecter que
PersonRepository
singleton dans le champ statique de laPerson
classe?J'ai créé un
@Configuration
, qui est ramassé à Printemps ApplicationContext temps de construction. Cette@Configuration
obtient injecté avec tous les fèves que j'ai besoin d'injecter des champs statiques dans d'autres classes. Puis, avec un@PostConstruct
annotation, j'attrape un crochet à faire tout un champ statique de l'injection de logique.