Quel est l'équivalent de ressort du point d'injection de CDI?
-
13-12-2019 - |
Question
J'aimerais créer une méthode du producteur de haricot de printemps qui est consciente qui l'appelle, donc j'ai commencé avec le code suivant:
@Configuration
public class LoggerProvider {
@Bean
@Scope("prototype")
public Logger produceLogger() {
// get known WHAT bean/component invoked this producer
Class<?> clazz = ...
return LoggerFactory.getLogger(clazz);
}
}
Comment puis-je obtenir les informations
Je recherche un équivalent de InjectionPoint
de CDI au monde printanier.
La solution
Autant que je sache, le printemps n'a pas un tel concept.
Alors seule une chose qui est consciente du point traitée est un beanpostProcessor .
Exemple:
@Target(PARAMETER)
@Retention(RUNTIME)
@Documented
public @interface Logger {}
public class LoggerInjectBeanPostProcessor implements BeanPostProcessor {
public Logger produceLogger() {
// get known WHAT bean/component invoked this producer
Class<?> clazz = ...
return LoggerFactory.getLogger(clazz);
}
@Override
public Object postProcessBeforeInitialization(final Object bean,
final String beanName) throws BeansException {
return bean;
}
@Override
public Object postProcessAfterInitialization(final Object bean,
final String beanName) throws BeansException {
ReflectionUtils.doWithFields(bean.getClass(),
new FieldCallback() {
@Override
public void doWith(final Field field) throws IllegalArgumentException, IllegalAccessException {
field.set(bean, produceLogger());
}
},
new ReflectionUtils.FieldFilter() {
@Override
public boolean matches(final Field field) {
return field.getAnnotation(Logger.class) != null;
}
});
return bean;
}
}
Autres conseils
printemps 4.3.0 active Paramètres d'injection et dépendanceDescriptor pour les méthodes de production de haricots:
@Configuration
public class LoggerProvider {
@Bean
@Scope("prototype")
public Logger produceLogger(InjectionPoint injectionPoint) {
Class<?> clazz = injectionPoint.getMember().getDeclaringClass();
return LoggerFactory.getLogger(clazz);
}
}
Au fait, Le problème de cette fonctionnalité SPR-14033 Liens vers quels liens vers cette question.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow