我以为我设置了一个spring bean,这样当我的web应用程序上下文初始化时,start方法就会运行,但它没有运行。当我在调试模式下启动应用程序时,我从未在start方法中遇到断点。以下是我设置课程的方法:
@Transactional
@Service
public class ServerStartup implements Lifecycle {
@Autowired
private EmpireService es;
/**
* sets up the server the first time. Should only be called once
*/
private boolean setup() {
[... sets stuff up, saves the empire]
}
/**
* initializes the Empire with its necessary value
*/
@Override
public void start() {
Empire empire = es.getEmpire();
if (empire == null) {
//initialize all data as there is no "empire"
this.setup();
empire = es.getEmpire();
}
Empire.setEmpireGold(empire.getInstanceEmpireGold());
}
/**
* does nothing
*/
@Override
public void stop() {
}
/**
* does nothing
*/
@Override
public boolean isRunning() {
return false;
}
}
我需要这样做的原因是,当我的程序启动时,它需要检查是否已构建地图。如果没有,则需要构建一个。此外,它实际上是设置一个缓存值,Empire的empireGold。
如果有一种比实施生命周期更好,更有效的方法,我会接受建议。否则我只是希望这个工作!
答案 0 :(得分:2)
在创建bean之后,有多种方法可以指示Spring运行一些初始化逻辑。我个人的偏好是使用@PostConstruct
注释,因为它是独立于Spring或任何其他容器的标准(在javax.annotation
包中定义)。
如果您选择此解决方案并使用start()
注释@PostConstruct
方法,请不要忘记在配置中加入<context:annotation-config/>
,否则将被忽略。
请参阅有关此批注here的Spring文档 有关同一问题的替代解决方案,请查看"Customizing the nature of a bean"上的部分。
答案 1 :(得分:1)
使用@PostConstruct