使用Spring MVC在应用程序启动时执行Java类

sto*_*ter 35 java spring spring-mvc

使用Spring MVC在应用程序启动时执行Java类的最佳方法是什么?

Rya*_*art 63

不一定是"最好"的方式.像往常一样,有很多方法可以做到,而"最好的"是最适合你项目的:

  1. 正如cjstehno所提到的,在XML中的bean元素上使用init-method ="..."
  2. 实现Spring的InitializingBean接口.在ApplicationContext中部署时,将在创建bean时调用afterPropertiesSet()方法.
  3. 使用@PostConstruct在bean上注释方法.同样,如果部署到ApplicationContext,则在创建bean时将调用带注释的方法.
  4. 如果您的bean更多是要绑定到Spring生命周期的基础结构bean,请实现ApplicationListener < ContextRefreshedEvent >.onApplicationEvent(..)方法将在Spring启动时调用,你可以在那里做任何你需要的工作.

  • 如果您需要运行的代码依赖于已经初始化的所有bean,那么您将需要使用#4. (4认同)

cjs*_*hno 22

假设您的上下文在启动时加载,请在Spring应用程序上下文中创建一个bean,并在XML配置中显式调出init方法(或实现Springs InitializingBean).如果你启用了延迟加载,你需要确保这个bean不是懒惰的.

<bean name="starter" init-method="start" class="com.my.StarterBean" lazy="false" />
Run Code Online (Sandbox Code Playgroud)

(请仔细检查文档中的参数).

如果在启动时未加载上下文,则可以注册服务器上下文侦听器(Servlet API的一部分,而不是Spring).

  • 我在Spring 3.2中发现`lazy`参数是`lazy-init`. (8认同)

小智 7

您可以使用任一实现:

1)实现接口InitializingBean.这种方法被授予加载所有bean然后调用afterPropertiesSet方法.

    @Override
    public void afterPropertiesSet() throws Exception {
        init();
    }
Run Code Online (Sandbox Code Playgroud)

2)使用JSR-250的注释@PostConstruct.这种方法不会等待Spring bean加载.

   @PostConstruct
    public void init() {

    }
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说,至少他的答案是给出一些方向 (3认同)