2011-12-20 23 views
1

私はスプリングシングルトンビーンで石英スケジューラを開始して停止しようとしています。しかし、ポストコンストラクションは2回呼び出されており、predestroyはまったく呼び出されません。 Thisリンクはプロキシのために2度呼び出されるのが自然だと言っていますが、これはpostconstructメソッドで例外を引き起こしています。私はシングルトンBeanがロードされた後にpostConstructを一度呼び出すだけです。春@PreDestroyと@PostConstructアノテーション

答えて

0

私はコンテキストローダーリスナーを書き、web.xmlリスナーを変更します。私はBeanを1回だけ初期化できます。

<listener> 
     <listener-class> 
       CustomContextLoaderListener 
     </listener-class> 
    </listener> 

public class CustomContextLoaderListener extends 
         org.springframework.web.context.ContextLoaderListener{ 
    Scheduler scheduler; 

    @Override 
    public void contextInitialized(javax.servlet.ServletContextEvent event) { 
      try{ 
      super.contextInitialized(event); 
      this.scheduler= WebApplicationContextUtils.getWebApplicationContext(event.getServletContext()).getBean(Scheduler.class); 

    } 

    @Override 
    public void contextDestroyed(ServletContextEvent event){ 

      super.contextDestroyed(event); 
      scheduler.stopSchedulers(); 


    } 
0

init-methodを使用して試したり、初期化Beanを実装してみてください。これらはpostConstructに対する代替のアプローチを提供します。

春のBeanがアンロードされたとき、つまりコンテナがシャットダウンされるか、またはConfigurableApplicationContextメソッドのclose()メソッドが他の手段によって呼び出されると、preDestroyが呼び出されます。

+0

init-metodも2回呼ばれる – ayengin

関連する問題