如何在Web上下文初始化中调用spring bean中的方法

时间:2016-10-10 23:26:18

标签: spring tomcat

我有一个war文件,其中包含以下内容

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方法,因为init-method =&#34; init&#34;在bean配置中,由于lazy-init =&#34; false&#34;而在部署时初始化bean。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

你确定你的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");
    }
}