2013-08-29 1 views
1

AbstractSingleBeanDefinitionParser 또는 다른 방법을 도출와구성 클래스 나 스프링 BeanPostProcessor를 구현하는 클래스 A가

public class A implements BeanPostProcessor { 


    private B b; 

    public A() { 
     b = new B(); 
     b.set(...);   
    } 


    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
    return bean; 
    } 

    // Intercept all bean initialisations and return a proxy'd bean equipped with code 
    // measurement capabilities 
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 
    return b.enhance(bean); 
    } 


} 

나는 내 파생 BeanPostProcessor 클래스 A. 내부에 자리 잡고 내 클래스 B를 구성하고자하는 방법 I는 (종속성 분사) 스프링이 클래스를 구성 할 수있는 것은이 가능 그것 BeanPostProcessor 내부 등 ...? 이 생성되는 다른 빈을 처리 할 수 ​​있도록

+0

또한보십시오 http://stackoverflow.com/questions/1201726/tracking-down-cause-of-springs-not-eligible-for-auto-proxying/19688634#19688634 "콩은 적합하지 않습니다 모든 BeanPostProcessors에 의해 처리되는 " –

답변

2

@Configuration와 클래스

public static class Child {} 

public static class Processor implements BeanPostProcessor {   
    @Autowired 
    public Child child;    
    @Override 
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
     return null; // Spring would complain if this was executed 
    } 
    @Override 
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 
     return null; // Spring would complain if this was executed 
    }  
} 

@Configuration 
public static class Config { 
    @Bean 
    public static Processor processor() { 
     return new Processor(); 
    } 
    @Bean 
    public Child child() { 
     return new Child(); 
    } 
} 

public static void main(String[] args) throws IOException, ParseException, JAXBException, URISyntaxException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException {  
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class); 
    Processor processor = context.getBean(Processor.class); 
    System.out.println(processor.child); 
} 

BeanPostProcessor (즉,이 콩을 완료 할 @Autowired에서 요구하는 것) 아직 "존재"하지 않습니다. javadoc 상태

ApplicationContexts 내 자신의 bean 정의에있는 BeanPostProcessor Bean을 자동으로 감지하고 이후 만든 콩에 적용 할 수 있습니다.

굵게 내. XML

<context:component-scan base-package="test"></context:component-scan> 
<bean id="processor" class="test.Main.Processor"></bean> 
<bean id="child" class="test.Main.Child"></bean> 

ClassPathXmlApplicationContext xmlContext = new ClassPathXmlApplicationContext("context.xml"); 
processor = xmlContext.getBean(Processor.class); 
System.out.println(processor.child); 
1

당신은 물론 당신의있는 BeanPostProcessor 클래스에 의존성 주입을 적용 할 수 있습니다.

은 아래있는 BeanPostProcessor 인터페이스를 구현 특별하다, 그래서 그들은이 컨테이너에 의해 다르게 취급된다 Spring Documentation

클래스에서 발췌 한 것입니다. 및 기타 모든 콩에 적용 - 모든 위해 BeanPostProcessors과 직접 참조 콩이의 ApplicationContext의 특별한 시작 단계의 한 부분으로, 모든 사람들 위해 BeanPostProcessors가 정렬 된 방식으로 등록됩니다 시작시 인스턴스화됩니다. 당신이 얻을 경우

관련 문제