我有一些Spring託管類(通過xml配置),其中一個是SessionFactory,它被注入另一個Spring託管類。每當這個類需要一個新的Session時,它就調用SessionFactory上的createSession。Spring管理的非靜態工廠創建的bean
但是,除非我錯了,這意味着Sessions本身不是Spring管理的,這是有問題的,因爲它們有一些@Transactional方法,它們需要Spring來管理bean。
我一直在讀FactoryBeans,但我不知道如何做到這一點的最佳方式,特別是因爲我的createSession方法接受一個參數,而FactoryBean.getObject()沒有。
我可以使用getObject,然後手動設置參數更高,但我想強制在工廠設置,如果可能的話。
任何人都可以幫忙嗎?提前致謝。下面是一個簡化的例子。
public class SessionFactory {
public final Session createSession(String username){
Session session = new SessionImpl(username);
return session;
}
}
public class SessionImpl implements Session{
private String username;
@Override
@Transactional
public void doSomething(){
// Does something
}
public void setUsername(String username){
this.username = username;
}
public String getUsername(){
return username;
}
}
public class Service {
private SessionFactory sessionFactory; // Set by Spring through xml config
public void doSomethingServicy(){
}
public void setSessionFactory(SessionFactory sessionFactory){
this.sessionFactory = sessionFactory;
}
}
謝謝,但不幸的是,目前這不是一個選項,你能提出一個解決問題的辦法嗎? – TheBloodGuy
我已經做了。這是一個選項。去吧。或者不要使用Spring事務。 – duffymo
我的問題並不涉及@Transactional是否在正確的位置,但我是否可以從工廠獲得Spring管理的bean。我已經明確指出,移動註釋不是一種選擇,因爲這個問題涉及遺留代碼和限制,我無法改變它。 – TheBloodGuy