BeanFactoryPostProcessor 구현체를 하나 만들었습니다.
메소드 구현 내용은 이렇습니다.

@Override
 public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
   throws BeansException {
beanFactory.createBean(ActionDefinition.class);
}

ActionDefinition 클래스는 bean 설정파일에 정의되지 않은 임의의 클래스 입니다.
또한 컴포넌트 스캔 대상도 아닙니다. 단, @Autowired 는 사용하고 있습니다.

여기서 발생하는 문제는 @Autowired 가 작동되지 않는 것 입니다.
이유는 간단합니다.

bean 생성 시점이 BeanFactoryPostProcessor 이기 때문입니다.
BeanFactoryPostProcessor 가 수행되는 시점은 @Autowired 를 처리하기 위한 AutowiredAnnotationBeanPostProcessor 가 등록되기 전입니다.
Posted by 째코

댓글을 달아 주세요

  1. 기선 2008.11.02 22:29 신고  댓글주소  수정/삭제  댓글쓰기

    우와.. 그렇군요. 흠. 근데 어떤 이유로 인해 빈을 저런 방법으로 등록하는지 궁금합니다. 어떤 경우인거죠?

    • 째코 2008.11.03 00:15 신고  댓글주소  수정/삭제

      쿼리와 뷰만으로 CURD를 가능하게 하기 위한 무언가를 만들고 있습니다. 설정방식을 최소화 시킬 생각으로 자바클래스와 애노테이션을 이용하고 있는데 바로 이 설정이 되는 자바클래스를 스프링 초기화 타임에 리플렉션으로 애노테이션을 읽어서 내부적으로 사용될 설정객체를 생성하고 있습니다. ConfigurableListableBeanFactory 인터페이스에 아주 막강한 기능이 많더군요...