2011-07-06 2 views
4

나는 (현재 구현되지 않은) 버전 의존 인스턴스를 생성하기로되어있는 컨트롤러를 가지고있다.공장에서 생성 한 인스턴스를 자동으로 작성하는 봄 방법은 무엇입니까?

@Controller 
public class ReportController { 

    @Autowired 
    private ReportCompFactory  reportCompFactory; 

     public ModelAndView getReport() { 
      I_Report report = reportCompFactory.getObject(); 
         ^^^^^<- no autowiring in this instance 
     } 
    ... 
} 

공장은 다음과 같습니다

@Component 
public class ReportCompFactory implements FactoryBean<I_Report> { 

    @Override 
    public I_Report getObject() throws BeansException { 
     return new ReportComp(); 
    } 

    @Override 
    public Class<?> getObjectType() { 
     return I_Report.class; 
    } 

    @Override 
    public boolean isSingleton() { 
     return false; 
    } 
} 

(주석 @Autowired) 생성 된 인스턴스 필드가 설정되어 있지 않습니다. FactoryBean은 구현하기에 적합한 인터페이스입니까?

XML 구성이 포함되지 않은 솔루션을 선호합니다.

구성 요소 자체 : 당신이 당신의 객체를 생성하는 경우

ReportComp implements I_Report { 

     @Autowired 
     private ReportDao   reportDao; 
            ^^^^^^^<- not set after creation 
    ... 
    } 

} 
+0

@irreputable 내 대답 아래의 질문을 가지고 할 세터를 통해 ReportComp로 설정; 당신이 그것에 대해 통보를 받았는지 확실하지 않다면 – Bozho

답변

8

스프링에서 autowiring을 수행하지 않습니다. 여기

  • 의 범위가 prototype의 수 빈을 정의하는 몇 가지 옵션이 있습니다 -이
  • 공장에서 ReportDao을 주입 (당신은 단순히 공장에서 인스턴스화를 원하는이 경우에 적용) 공장 중복을 만들 것입니다, 및
  • 이 공장에서 ApplicationContext를 주입하고 ctx.getAutowireCapableBeanFactory().autowireBean(instance)
+0

@stacker 내가 선택한 솔루션을 배우는 데 관심이 있습니까? – irreputable

관련 문제