我必须在启动和停止应用程序时更新表条目。
我有一个调用DAO方法的服务但是当调用这个DAO方法时,自动装配的SessionFactory
为空。
我使用了两种方法:
在这两种情况下,我在DAO类中将SessionFactory
视为null。我在DAO类中使用Setter-Injection来注入SessionFactory
。
环境:JDBC-Datasource,Hibernate 3.4,Spring 3.1.2,Weblogic 10.3
如果你能指出我正确的方向,那就太好了。
更新: 感谢您的所有评论,我得到了解决。我们的应用程序是一个EAR,我的DAO bean配置位于不同的WAR的applicationContext.xml中。我将DAO bean配置移动到我的共享配置(appConfig.xml),它就像魅力一样。我使用了@PostConstruct和@PreDestroy
答案 0 :(得分:1)
您可以使用SmartLifecycle
接口进行配置,然后将其配置为bean:
<bean class="com.my.package.MySmartlifecycle">
您的实施:
public class MySmartLifecycle implements SmartLifecycle{
//autowire anything you need from context
@Override
public void start() {
//do stuff on startup here
}
@Override
public void stop() {
//do stuff on shutdown here
}
@Override
public boolean isRunning() {
return false;
}
@Override
public int getPhase() {
return 0;
}
@Override
public boolean isAutoStartup() {
return true;
}
@Override
public void stop(Runnable callback) {
}
}
答案 1 :(得分:0)
如果要在初始化上下文后执行方法,则必须使用ContextRefreshedEvent。在上下文销毁的情况下,您应该使用ContextStoppedEvent,但您还必须记住,不能保证将发布此事件。
@Component
public class SpringStartedListener implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
// do something
}
}
@Component
public class SpringClosedListener implements ApplicationListener<ContextStoppedEvent> {
@Override
public void onApplicationEvent(ContextStoppedEvent event) {
// do something
}
}
如果您需要更多详情,请参阅http://www.tutorialspoint.com/spring/event_handling_in_spring.htm