当前位置: 首页 > 知识库问答 >
问题:

Spring管理的非静态工厂创建bean

宁弘亮
2023-03-14

我有一些Spring托管类(通过xml配置),其中一个是SessionFactory,它被注入到另一个Spring托管类中。每当该类需要一个新的会话时,它就调用SessionFactory上的createSession。

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;
    }


}

共有1个答案

冉高寒
2023-03-14

我认为@Transactional注释放在了错误的地方。

不是会话应该是事务性的;它应该应用于实现用例的基于接口的服务方法。那是典型的Spring成语。我建议遵循它。

 类似资料:
  • 我使用方法遇到了麻烦,无论我用什么方法尝试,我都得到了: null 我的代码:

  • http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“> 但面对这个例外: 任何帮助都将不胜感激...

  • 问题内容: 如果我正在编写用于创建对象的静态工厂方法,那么如何为该工厂类使用’@Component’批注并指示(带有一些批注)创建该类bean所应使用的静态工厂方法?以下是我的意思的伪代码: 问题答案: 恐怕您目前无法执行此操作。但是,使用Java配置非常简单: 在这种情况下,不需要任何Spring注释。当然,您可以改用优质的XML。

  • 问题内容: 我正在学习“ 有效的Java” ,书中并未建议我认为一些标准的东西,例如对象的创建,我的印象是构造函数是最好的方法,书中说我们应该利用在静态工厂方法中,我不能说出一些优点,而在缺点中却有缺点,所以我在问这个问题,这是使用它的好处。 优点: 静态工厂方法的一个优点是,与构造函数不同,它们具有名称。 静态工厂方法的第二个优点是,与构造函数不同,不需要每次调用它们时都创建一个新对象。 静态工

  • 我是Spring Boot的新手,我想用Spring Boot制作一个rest Web服务。我需要使用Jpa/Hibernate在数据库中保存一些数据。当我用@Entity注释我的域模型类,并将应用程序作为Spring boot应用程序启动时(顺便说一下,我的应用程序类有一个@EntityScan()注释)我得到以下错误: 在类路径资源 [组织/Spring框架/启动/自动配置/orm/jpa/H

  • 我在Spring对bean实例化有疑问。 根据Spring参考文档,在“实例化bean”一节中提到 “容器本身通过反射式调用它的构造函数直接创建bean,有点等同于使用新运算符Java代码”。 这意味着Spring容器使用反射来创建bean。然而,在少数情况下,容器还对类使用静态工厂方法来创建bean。我所知道的容器使用静态工厂方法的唯一情况是“当构造函数是私有的”。 所以我的疑问是,既然容器使用