J'ai un objet de données (avec getters \ poseur seulement) qui doit être au courant du profil de printemps, à savoirJava Spring - comment injecter @Value à un objet de données?
@Value("${spring.profiles.active}")
private String profile;
J'ai ajouté une logique à l'un de ses méthode « set » qui vérifie le profil, à savoir
public void setItem(Item msg) {
if (environmentProperties.isDevMode()) {
this.msg= msg;
}
}
puisque cette classe est souvent maréchal \ unmarhsalled extérieur, donc, bien sûr, la @Value n'est pas peuplée - sinus Je n'ai pas utilisé le printemps autowire pour créer l'instance de classe ... I Tried défini la class comme composant, et autowire à une classe externe qui contient le profil @Value - mais cela ne fonctionne pas J'utilise le printemps 3.2 - sans définition XML.
des suggestions?
b.t. que les objets de données souvent enveloppés dans une classe d'exception - ainsi quand il est créé le profil devrait également être connu à l'objet de données ...
merci!
ÉDITÉE:
- utilisant ApplicationContextAware ne fonctionne pas - je reçois null la méthode 'setApplicationContext' est jamais invoqué.
- également en essayant d'obtenir le contexte directement ne fonctionne pas - obtenir null à la place lors de l'utilisation: 'ApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext();'
FIXE: J'ai finalement trouvé un exemple comment accéder au contexte staticly d'une classe externe:
@Configuration
public class ApplicationContextContainer implements ApplicationContextAware {
private static ApplicationContext CONTEXT;
/**
* This method is called from within the ApplicationContext once it is
* done starting up, it will stick a reference to itself into this bean.
*
* @param context a reference to the ApplicationContext.
*/
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
CONTEXT = context;
}
/**
* This is about the same as context.getBean("beanName"), except it has its
* own static handle to the Spring context, so calling this method statically
* will give access to the beans by name in the Spring application context.
* As in the context.getBean("beanName") call, the caller must cast to the
* appropriate target class. If the bean does not exist, then a Runtime error
* will be thrown.
*
* @param beanName the name of the bean to get.
* @return an Object reference to the named bean.
*/
public static Object getBean(String beanName) {
return CONTEXT.getBean(beanName);
}
Avez-vous essayé @DependsOn ('yourPropertiesBeanName')? – Daniel