2012-10-19 3 views
1

를 주입 할 수있는 빈의 인스턴스에 주석을 액세스 할 수 ClassB에 주입되는 수치에 @SomeAnnotation에 액세스하여 someString 값을 "foo"로 설정할 수 있습니다.나는 수업을 감안할 때

나는 이것이 매우 IoC가 아니라는 것을 알고 있으며 나는 그것을 할 수 없다고 생각할 것입니다.

답변

1

당신은 @PostConstructClassA의와 같은 것을 할 수 있습니다

@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; 
    } 
} 
+0

그래서 나는이 구현해야 할 것이다 메소드를 사용하면 모든 클래스에서 'ClassA'와 같아집니다. 나는 Spring Context에 등록 할 수있는 BeanPostProcessor와 같은 일반적인 솔루션을 찾고 있었다. – Tnem

+0

글쎄, 그건 좋은 생각이야, 당신은 실제로 콩 포스트 프로세서로 동일한 코드를 이동할 수 있고 여전히 작동해야한다, 나는 업데이트 된 답변을 추가했다. –