我有一个方法,它包含一些业务逻辑,比如使用某些特定于域的服务器创建协议等等。我需要在应用程序启动时运行该方法一次。
我如何达到以下要求?
这就是我已经做过的事情。我为业务类创建了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;
}
}
}
这是正确的方法吗?或任何其他完美的方式来做到这一点?
肯定赞赏好的答案。
答案 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,它提供了在布线过程中获取应用程序上下文的钩子。同样,在对象上设置属性后会发生这种情况。