2013-01-04 95 views
5

使用Spring 3.1。如果我想檢索一個具有原型範圍的bean(即,我想每次都需要該類的不同實例),是否可以在不使用ApplicationContextaware類的情況下檢索bean?是否可以在不使用ApplicationContextAware的情況下檢索具有原型範圍的Spring bean

這是我要做的事目前

@Component 
@Qualifier("MyService") 
public class MyServiceImpl implements MyService { 

    @Override 
    public void doSomething() { 
     Blah blah = (Blah)ApplicationContextProvider.getContext().getBean("blah"); 
     blah.setThing("thing"); 
     blah.doSomething(); 
    } 
} 


@Component("blah") 
@Scope("prototype") 
public class Blah { 
    .... 
} 

其中ApplicationContextProvider實現了ApplicationContextAware。

是否有可能做到這一點與註釋或簡單的Spring配置,而無需使用ApplicationContextAware類?

回答

0

您並不需要ApplicationContextAware。你只需要一個BeanFactory(ApplicationContextAware只是一個方便的方法)。

具有範圍原型的bean只是意味着每次調用ApplicationContext.getBean時都會創建一個新的bean實例。如果你嘗試在singleton中注入一個原型bean,你的prototype bean將被注入一次(所以不再是原型)。

有一種叫做method injection的東西可以幫助你,如果你真的需要它,但它比簡單地調用applicationContext.getBean()更復雜。

+0

感謝您的回覆。我試圖擺脫編寫任何Spring特定的Java,無論是實現ApplicationContextAware還是使用BeanFactory。 – CodeClimber

相關問題