1

我正在使用 jax-rs 和 spring 编写 Web 服务。我有一个代表数据库连接池的 Singleton 类,称为“数据源”。

     Datasource datasource = Datasource.getInstance();
     Connection connection = datasource.getConnection();

此代码运行,因此在第一个“查询”上创建单例,但我想在服务器启动时创建单例实例。我该如何做到这一点?在我的 web.xml 中,我有

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/application.xml</param-value>
</context-param>

在 application.xml 我有

 <bean name="myRoutes" class="com.package.myClass" />

我在这里加一个豆子吗?

4

3 回答 3

1

默认情况下,作为初始化过程的一部分,ApplicationContext 实现会急切地创建和配置所有单例 bean。单例范围是 Spring 中的默认范围。

在定义使用静态工厂方法创建的 bean 时,使用class属性来指定包含静态工厂方法的类,并使用命名属性factory-method来指定工厂方法本身的名称。

<bean
    id="dataSource"
    class="com.package.DataSource"
    factory-method="getInstance" />
于 2013-08-05T17:30:50.700 回答
0

是的,根据这个定义,您在服务器启动时创建单例 spring bean:

<bean name="myRoutes" class="com.package.myClass" />
于 2013-08-05T17:18:26.753 回答
0

您可能必须实现 a ServletContextLitener,并将其定义为部署描述符中的侦听器。根据文档

方法的 javadoc ServletContextListenercontextInitialized(ServletContextEvent sce)

Web 应用程序初始化过程开始的通知。在 Web 应用程序中的任何过滤器或 servlet 初始化之前,所有 ServletContextListener 都会收到上下文初始化通知

Mkyong的网站以同样的例子来演示使用

于 2013-08-05T17:18:28.550 回答