2011-07-06 45 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有你我的回答如下問題;不確定您是否收到通知 – Bozho

回答

8

春不執行自動裝配。這裏有幾個選項

  • 定義bean是範圍prototype - 這將使工廠多餘的(這是適用的情況下,你只是想實例在工廠)
  • 注入在工廠ReportDao,並通過制定者將其設置爲ReportComp
  • 在工廠注入ApplicationContextctx.getAutowireCapableBeanFactory().autowireBean(instance)
+0

@stacker我有興趣瞭解您選擇哪種解決方案? – irreputable