CDI의 주입점에 해당하는 봄 DI는 무엇입니까?
-
13-12-2019 - |
문제
나는 그것을 호출 한 사람을 알고있는 스프링의 콩 생산자 메소드를 만들고 싶다. 그래서 다음 코드로 시작했다.
@Configuration
public class LoggerProvider {
@Bean
@Scope("prototype")
public Logger produceLogger() {
// get known WHAT bean/component invoked this producer
Class<?> clazz = ...
return LoggerFactory.getLogger(clazz);
}
}
.
정보 누구를 얻고 싶어 은 콩을 주입하고 싶습니다
저는 CDI의 InjectionPoint
봄 세계에서
해결책
내가 아는 한 봄에는 그러한 개념이 없어야합니다.
처리되는 점만 알고있는 것은 beanpostProcessor .
예 :
@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;
}
}
. 다른 팁
Spring 4.3.0은 Bean 생성 방법의 주입점 및 dependencyDescriptor 매개 변수 :
@Configuration
public class LoggerProvider {
@Bean
@Scope("prototype")
public Logger produceLogger(InjectionPoint injectionPoint) {
Class<?> clazz = injectionPoint.getMember().getDeclaringClass();
return LoggerFactory.getLogger(clazz);
}
}
.
제휴하지 않습니다 StackOverflow