2013-03-10 73 views
1

我以爲我設置了一個spring bean,這樣當我的web應用程序上下文被初始化時,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; 
    }  
} 

,我需要做的原因是,當我的程序啓動時,它需要檢查,如果地圖已經建成。如果沒有,它需要建立一個。此外,它本質上是建立一個緩存的價值,即帝國的帝國黃金。

如果有比實施生命週期更好,更有效的方法,我會接受建議。否則,我只是想要這個工作!

回答

3

有多種方式指示Spring在創建bean後運行一些初始化邏輯。我個人偏好使用@PostConstruct註釋,因爲它是獨立於Spring或任何其他容器的標準(在javax.annotation包中定義)。

如果您選擇此解決方案並使用@PostConstruct註釋您的start()方法,請不要忘記在您的配置中包含<context:annotation-config/>,否則它將被忽略。

查看Spring注意事項文檔here
有關同一問題的替代解決方案,請查看"Customizing the nature of a bean"上的部分。

+0

酷,像魅力一樣工作。 – CorayThan 2013-03-10 22:57:03

2

註釋你的啓動方法@PostConstruct