2015-05-19 47 views
1

我有一個單獨的服務類,如下面:春季單服務和原型方法查找注射

@Service 
public class SingletonClass { 

    // the context is prototype scope 
    private Context context; 

    public void run(){ 
     context.setXyz(); 
    } 

    public void runThis(){ 
     context.getXyz(); 
    } 

    // setter,getter methods for context 
} 

我如何與查找法注入線程安全的方式實現這一目標?

我想跨方法共享狀態。用每種方法獲取新的上下文,並在隨後的方法中使用。

回答

0

你應該修改你的Singleton類如下

@Service 
    public abstract class SingletonClass{ 

    protected abstract Context createContext(); 

    private Context context; 
    @PostConstruct 
    public void init() { 
    context = createContext(); 
    } 

    public void run(){ 
    context().setXyz(); 
    } 

    public void runThis(){ 
    context().getXyz(); 
    } 

    public void runThisWithNewContext() { 
    createContext().getXyz(); 
    } 
    } 

而且你的XML配置的樣子,

 <bean id="context" class="Context" scope="prototype" /> 
    <bean id="singletonClass" class="SingletonClass"> 
     <lookup-method name="createContext" bean="context" /> 
    </bean> 
+0

如果我用上述方案,公共無效runThis(去){ 的createContext() .getXyz(); } - 這裏將創建一個新的上下文,而不是獲取現有的上下文。不是嗎? – TheCodeGladiator

+0

是的,它會在每次調用runThis()時創建新實例 – Thilak

+0

我想將狀態存儲爲實例變量,並且我們可以在多線程環境中管理狀態嗎?有什麼方法可以爲彈簧提供開箱即用的解決方案嗎? – TheCodeGladiator