应用程序启动时,在Spring中初始化一次方法的最佳方法是什么?

时间:2013-06-07 15:47:12

标签: java spring spring-mvc controller

我有一个方法,它包含一些业务逻辑,比如使用某些特定于域的服务器创建协议等等。我需要在应用程序启动时运行该方法一次。

我如何达到以下要求?

这就是我已经做过的事情。我为业务类创建了bean,也为applicationContext.xml中的控制器创建了bean,并在控制器中注入了业务类bean。

我的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 个答案:

答案 0 :(得分:1)

您可以使用bean XML元素上的init-method属性将xml文件中的bean设置为具有init方法,如下所示:

<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>

这将在初始化bean之后调用MyBean上的myInit()方法。在将属性连接在一起后会发生这种情况。如果你使用Annotations来连接东西,你也可以使用注释,但我不知道它们是否在我的头脑中。该方法必须不带参数。

另一个选项是实现ApplicationContextAware,它提供了在布线过程中获取应用程序上下文的钩子。同样,在对象上设置属性后会发生这种情况。