我有一些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