Spring에는 특정 어노테이션으로 어노테이션이있는 Bean이 @Autowired
사용자 정의 로직을 가져 오고 실행 하는시기를 감지하는 메커니즘 또는 리스너가 있습니까? @ConfigurationProperties
자동 연결되기 전에 자동으로 필드를 주입하는 것과 유사한 것 입니다.
@ExampleAnnotation
인스턴스화되기 전에 주석이 달린 특정 빈의 필드에 값을 주입해야하는 요구 사항이 있습니다. 이상적으로는이 청취자에서 다음을 수행합니다.
- 인스턴스화되는 현재 Bean에 주석이 추가되었는지 묻습니다.
@ExampleAnnotation
- 그렇지 않은 경우 반환하십시오. 그렇다면 리플렉션을 사용하여이 빈에서 필드 이름을 가져오고 저장소를 사용하여 채 웁니다.
이와 같은 것이 가능합니까?
다음 코드를 사용하여 얻을 수 있습니다.
@Component
class MyBeanPostProcessor implements BeanPostProcessor, ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof MyBean) {
bean.setXyz(abc);
return bean;
}
MyAnnotation myAnnotation = this.applicationContext.findAnnotationOnBean(beanName, MyAnnotation.class);
if (myAnnotation != null) {
bean.setXyz(myAnnotation.getAbc());
return bean;
}
return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Lazy
@Autowired
public MyBeanPostProcessor(MyLazyAutowiredBean myLazyAutowiredBean) {
}
}