Spring Аннотации @PreDestroy и @PostConstruct - PullRequest
1 голос
/ 20 декабря 2011

Я пытаюсь запустить и остановить кварцевый планировщик в пружинном синглтон-бине. Но постструктура вызывается два раза, а predestroy вообще не вызывается. Эта ссылка говорит о том, что из-за того, что он проксирован, вызывается дважды, но это вызывает исключение в методе postconstruct.Я хочу, чтобы postConstruct вызывался только один раз после загрузки синглтон-компонента.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2011

Я пишу слушатель contextloader и меняю слушатель web.xml. Так что я могу инициализировать bean-компонент только один раз.

 <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 голосов
/ 20 декабря 2011

почему бы вам не попробовать это с помощью init-метода или попробовать реализовать инициализирующий компонент.Они предоставляют альтернативные подходы к postConstruct.

Когда пружинные бины выгружены, т. Е. Когда контейнер закрыт или метод close () в ConfigurableApplicationContext метод вызывается с помощью других средств,вызывается preDestroy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...