【问题标题】:How call a method in a spring bean on web context initialization如何在 web 上下文初始化时调用 spring bean 中的方法
【发布时间】:2016-10-10 23:26:18
【问题描述】:

我有一个包含以下内容的战争文件

Spring Bean

public class DataLoader {
   private static Logger log = Logger.getLogger(DataLoader.class.getName());
   public void init() {
       log.info("DataLoader init called");
   }
}

applicationContext.xml

<bean id="dataLoader" class="com.example.DataLoader"
     init-method="init" lazy-init="false">
 </bean>

web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:WEB-INF/applicationContext.xml</param-value>
</context-param>

<listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

我希望在将 war 文件部署到 Web 容器时调用 DataLoader 中的 init 方法。但是,它不会被调用。

我认为由于 bean 配置中的 init-method="init" 而在 bean 初始化后会调用 init 方法,并且由于 lazy-init="false" 会在部署时初始化 bean。

我做错了什么?

【问题讨论】:

    标签: spring tomcat


    【解决方案1】:

    您确定您的 bean 正在初始化吗?你可能想让你的DataLoader 类扩展InitializingBean,并将init 重命名为afterPropertiesSet。然而,更现代的方法是删除 bean 的 XML 配置,并以这种方式改变你的类:

    @Component
    public class DataLoader {
        private static Logger log = Logger.getLogger(DataLoader.class.getName());
    
        @PostConstruct
        public void init() {
            log.info("DataLoader init called");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多