2013-06-07 3 views
0

У меня есть один метод и он содержит некоторую бизнес-логику, например, создание протоколов с использованием некоторых доменных серверов и т. Д. Мне нужно запустить этот метод один раз, когда начнется мое приложение.Лучший способ инициализировать метод один раз весной, когда приложение запускается?

Как я могу достичь своего требования ниже?

Это то, что я уже сделал. Я создал компонент для бизнес-класса, а также для контроллера в applicationContext.xml и ввел бизнес-класс в контроллер.

Мой applicationContext.xml будет,

<bean id="configInfo" class="com.pointel.Agent_Chat.ServerInfo.ConfigServerInfo"> 
    <property name="configurationServer_name" value="${CS_NAME}"></property> 
    <property name="configurationServer_host" value="${CS_IPADDRESS}"></property> 
</bean> 

<bean id="config_con" class="com.pointel.Agent_Chat.ServerConnection.ConfigServerConnection" > 
    <property name="info" ref="configInfo"></property> 
</bean> 

<bean id="init_Server" class="com.pointel.Agent_Chat.Initialiser.Initialize_Servers"> 
    <property name="connection" ref="config_con"></property> 
</bean> 

<bean id="initCon" class="com.pointel.Agent_Chat.controllers.InitServerController"> 
    <property name="init_Server" ref="init_Server"></property> 
</bean> 

Мой Controller будет,

@Controller 
public class InitServerController { 

    public static int count = 0; 
    private Initialize_Servers init_Server; 

    public InitServerController(){ 
     count++; 
     System.out.println("Init Controller "+count+" time"); 
    } 

    public void setInit_Server(Initialize_Servers init_Server) { 
     this.init_Server = init_Server; 
     initializeServers(); 
    } 



    private void initializeServers() { 
     ServerStatus.config_status = init_Server.initialize_Config_Server(); 
     System.out.println("config_status : "+ServerStatus.config_status); 
    } 

} 

Business class Мой будет,

public class Initialize_Servers { 

    private ConfigServerConnection connection; 
    private InteractionServerConnection interConnection; 
    private UCSConnection ucsConnection; 

    public Initialize_Servers(){ 
     System.out.println("Initialize_Servers class instance was created !"); 
    } 

    public ConfigServerConnection getConnection() { 
     return connection; 
    } 

    public void setConnection(ConfigServerConnection connection) { 
     this.connection = connection; 
    } 

    public boolean initialize_Config_Server(){ 
     try{ 
      ConfServerProtocol protocol = connection.getConnection(); 
      if(protocol != null){ 
       System.out.println("Config server Protocol is not null"); 
       return true; 

      } 
     }catch(Exception e){ 

      return false; 
     } 
    } 

} 

Является ли это правильный путь? или любой другой прекрасный способ сделать это?

Хорошие ответы определенно оценены.

+1

Вы проверили 'ApplicationContextAware'? – Chris

ответ

1

Вы можете установить компонент в файле XML, чтобы иметь метод инициализации с помощью атрибута INIT-метода на элементе боб XML, например, так:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 

    <bean id="myBean" class="com.myjunk.MyBean" 
     init-method="myInit" > 
    </bean> 
</beans> 

Это вызов метода MyInit() на MyBean после того, как компонент был инициализирован. Это происходит после того, как свойства были связаны друг с другом. Если вы используете аннотации для проводов, есть аннотации, которые вы можете использовать, но я не знаю их с головы. Метод не должен принимать никаких параметров.

Другой вариант - реализовать ApplicationContextAware, который обеспечивает перехватывание контекста приложения во время процесса проводки. Опять же, это происходит после того, как свойства заданы на объекте.

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