Java/Spring:如何在服务器启动时恢复对象

Java/Spring:如何在服务器启动时恢复对象,java,spring,Java,Spring,我正在使用jax-rs和spring编写一个web服务。我有一个表示数据库连接池的单例类,称为“Datasource” 这段代码运行,因此在第一次“查询”时创建了singleton,但我想在服务器启动时创建singleton实例。我如何做到这一点?在我的web.xml中,我有 <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WE

我正在使用jax-rs和spring编写一个web服务。我有一个表示数据库连接池的单例类,称为“Datasource”

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

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

上下文配置位置
/WEB-INF/application.xml
在application.xml中,我有

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


是否在此处添加bean?

是的,根据此定义,您可以在服务器启动时创建singleton spring bean:

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

是的,根据此定义,您可以在服务器启动时创建单例Springbean:

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

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

ServletContextListener
方法的javadoc说

通知web应用程序初始化进程已启动 启动。将上下文通知所有ServletContextListener 在web应用程序中的任何筛选器或servlet之前进行初始化 初始化


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

ServletContextListener
方法的javadoc说

通知web应用程序初始化进程已启动 启动。将上下文通知所有ServletContextListener 在web应用程序中的任何筛选器或servlet之前进行初始化 初始化


默认情况下,ApplicationContext实现在初始化过程中急切地创建和配置所有单例bean。单例作用域是Spring中的默认作用域

定义使用静态工厂方法创建的bean时,使用
属性指定包含静态工厂方法的类,使用名为
工厂方法
的属性指定工厂方法本身的名称

<bean
    id="dataSource"
    class="com.package.DataSource"
    factory-method="getInstance" />

默认情况下,ApplicationContext实现在初始化过程中急切地创建和配置所有单例bean。单例作用域是Spring中的默认作用域

定义使用静态工厂方法创建的bean时,使用
属性指定包含静态工厂方法的类,使用名为
工厂方法
的属性指定工厂方法本身的名称

<bean
    id="dataSource"
    class="com.package.DataSource"
    factory-method="getInstance" />


Spring等DI框架背后的想法是消除像
Datasource这样的单例。有没有理由不到处注入实例,而不是手动调用
getInstance()
?@TomG,可能只是因为我对该框架是全新的,还没有深入了解。这是什么样子的?在您使用
数据源的类中,您会请求通过
@Autowired
-例如
@Autowired public Foo(Datasource ds){…}
将其注入。如果您以bean的形式提供单个
Datasource
实例,通过在XML中配置它,那么在创建这些类时,它将被提供给这些类。查看Spring文档了解更多背景信息。Spring等DI框架背后的想法是消除像
Datasource
这样的单例。有没有理由不到处注入实例,而不是手动调用
getInstance()
?@TomG,可能只是因为我对该框架是全新的,还没有深入了解。这是什么样子的?在您使用
数据源的类中,您会请求通过
@Autowired
-例如
@Autowired public Foo(Datasource ds){…}
将其注入。如果您以bean的形式提供单个
Datasource
实例,通过在XML中配置它,那么在创建这些类时,它将被提供给这些类。查看Spring文档了解更多背景信息。对于新项目,我强烈建议使用新的基于注释的语法。在您的一个
@Configuration
对象中,您只有一个方法
@Bean public DataSource DataSource()
,该方法返回正确构造的对象,Spring将拾取该对象并使其可用。对于新项目,我强烈建议使用新的基于注释的语法。在一个
@Configuration
对象中,您只有一个方法
@Bean public DataSource DataSource()
,该方法返回正确构造的对象,Spring将拾取该对象并使其可用。