我有一个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。
我做错了什么?
答案 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");
}
}