使用SpringMVC在应用程序启动时执行Java类
使用Spring MVC在应用程序启动时执行Java类的最佳方式是什么?假设您的上下文在启动时加载,使用XML配置中显式调用的init方法在Spring应用程序上下文中创建bean(或实现Springs InitializingBean)。如果启用了延迟加载,则需要确保该bean不是延迟的使用SpringMVC在应用程序启动时执行Java类,java,spring,spring-mvc,Java,Spring,Spring Mvc,使用Spring MVC在应用程序启动时执行Java类的最佳方式是什么?假设您的上下文在启动时加载,使用XML配置中显式调用的init方法在Spring应用程序上下文中创建bean(或实现Springs InitializingBean)。如果启用了延迟加载,则需要确保该bean不是延迟的 <bean name="starter" init-method="start" class="com.my.StarterBean" lazy="false" /> (请仔细检查文档中的参
<bean name="starter" init-method="start" class="com.my.StarterBean" lazy="false" />
(请仔细检查文档中的参数)
如果启动时未加载上下文,则可以注册服务器上下文侦听器(Servlet API的一部分,而不是Spring)。不一定有“最佳”方法。与往常一样,有很多方法可以做到这一点,“最佳”是指适合您的项目的最佳方法:
您可以使用以下任一实现: 1) 实现接口
初始化bean
。这种方法被授权加载所有bean,然后调用afterPropertiesSet
方法
@Override
public void afterPropertiesSet() throws Exception {
init();
}
2) 使用JSR-250的注释@PostConstruct
。这种方法不会等待Springbean加载
@PostConstruct
public void init() {
}
如果您需要运行的代码依赖于所有已经初始化的bean,那么您将需要使用#4。由于默认情况下,Spring bean是在应用程序上下文加载时启动的单例,因此您还可以从bean的默认构造函数中运行代码。不过,根据上面的评论,您需要注意bean的生命周期。谢谢@sourcedelica!我想在Spring的应用程序上下文加载完成后,通过使用Hibernate本身注入一些示例实体来预填充我的数据库。我尝试了#3,但会话(处理CRUD操作)没有初始化#4个工作得很好!我不相信@sourcedelica的评论是正确的(或者我误解了他的意思)#自动接线完成后运行2次。如果您需要使用自动连接的bean或值来正确配置bean,请将配置代码放在
@PostConstruct
-注释的方法中。这意味着,如果您需要在所有bean的@PostConstruct
运行之后运行,则需要使用#4。谢谢您的回答,我使用了@PostConstruct注释Yep,那也行。我忘记了注释。我发现在Spring 3.2中,lazy
参数是lazy init
。这不是答案。你能解释一下你的意思吗?嗯,这可能是一个答案,但不是一个很好的答案。请解释你的代码是做什么的,以及它是如何回答这个问题的。你的答案被标记为低质量帖子评论队列,除非改进,否则很有可能被删除。对我来说,至少他的答案给出了一些方向