1
를 주입 할 수있는 빈의 인스턴스에 주석을 액세스 할 수 ClassB
에 주입되는 수치에 @SomeAnnotation
에 액세스하여 someString
값을 "foo"로 설정할 수 있습니다.나는 수업을 감안할 때
나는 이것이 매우 IoC가 아니라는 것을 알고 있으며 나는 그것을 할 수 없다고 생각할 것입니다.
를 주입 할 수있는 빈의 인스턴스에 주석을 액세스 할 수 ClassB
에 주입되는 수치에 @SomeAnnotation
에 액세스하여 someString
값을 "foo"로 설정할 수 있습니다.나는 수업을 감안할 때
나는 이것이 매우 IoC가 아니라는 것을 알고 있으며 나는 그것을 할 수 없다고 생각할 것입니다.
당신은 @PostConstruct
ClassA
의와 같은 것을 할 수 있습니다
@PostConstruct
public void postConstruct(){
SomeAnnoation someAnnotation = this.getClass().getField("bar").getAnnotation(SomeAnnotation.class);
bar.someString(someAnnotation.value());
}
업데이트 : - BeanPostProcessor를 사용하여 일반 솔루션 :
public class SomeAnnotationFieldInitalizer implements BeanPostProcessor{
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
Field[] fields = bean.getClass().getFields();
if (fields!=null){
for (Field field:fields){
SomeAnnotation someAnnotation = field.getAnnotation(SomeAnnotation.class);
if (someAnnotation!=null){
try {
ReflectionUtils.makeAccessible(field);
field.set(bean, someAnnotation.value());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
return bean;
}
}
그래서 나는이 구현해야 할 것이다 메소드를 사용하면 모든 클래스에서 'ClassA'와 같아집니다. 나는 Spring Context에 등록 할 수있는 BeanPostProcessor와 같은 일반적인 솔루션을 찾고 있었다. – Tnem
글쎄, 그건 좋은 생각이야, 당신은 실제로 콩 포스트 프로세서로 동일한 코드를 이동할 수 있고 여전히 작동해야한다, 나는 업데이트 된 답변을 추가했다. –