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

使用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" /> (请仔细检查文档中的参

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

假设您的上下文在启动时加载,使用XML配置中显式调用的init方法在Spring应用程序上下文中创建bean(或实现Springs InitializingBean)。如果启用了延迟加载,则需要确保该bean不是延迟的

<bean name="starter" init-method="start" class="com.my.StarterBean" lazy="false" />

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

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

不一定有“最佳”方法。与往常一样,有很多方法可以做到这一点,“最佳”是指适合您的项目的最佳方法:

  • 在XML中的bean元素上使用init method=“…”,如cjstehno所述
  • 实现Spring的接口。在中部署时,创建bean时将调用AfterPropertieSet()方法
  • 使用注释在bean上注释方法。同样,如果部署到ApplicationContext,则在创建bean时将调用带注释的方法
  • 如果您的bean更像是要绑定到Spring生命周期的基础架构bean,那么实现它。onApplicationEvent(..)方法将在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
    。这不是答案。你能解释一下你的意思吗?嗯,这可能是一个答案,但不是一个很好的答案。请解释你的代码是做什么的,以及它是如何回答这个问题的。你的答案被标记为低质量帖子评论队列,除非改进,否则很有可能被删除。对我来说,至少他的答案给出了一些方向