2013-03-10 2 views
1

Я думал, что настроил весенний боб, чтобы при инициализации контекста веб-приложения запускался метод запуска, но он не работает. Когда я запускаю свое приложение в режиме отладки, я никогда не ударяю точку останова в методе запуска. Вот как я класс создан:Метод старта жизненного цикла весны не работает

@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 Empire.

Если есть лучший, более эффективный способ сделать это, чем реализовать жизненный цикл, я буду открыт для предложений. В противном случае я просто хочу, чтобы это сработало!

ответ

3

Существует несколько способов проинструктировать Spring о запуске некоторой логики инициализации после создания компонента. Мое личное предпочтение заключается в использовании аннотации @PostConstruct, потому что это стандарт (определенный в пакете javax.annotation) независимо от Spring или любого другого контейнера.

Если вы воспользуетесь этим решением и комментируете свой метод start() с помощью @PostConstruct, не забудьте указать в вашей конфигурации <context:annotation-config/>, иначе он будет проигнорирован.

См. Весеннюю документацию по этой аннотации here.
Для альтернативных решений по той же самой проблеме ознакомьтесь с разделом "Customizing the nature of a bean".

+0

Прохладный, работает как шарм. – CorayThan

2

Аннотировать свой метод пуска с @PostConstruct

Смежные вопросы