我想使用Tomcat来简单地启动服务,而不是servlet。
我知道Tomcat是一个servlet容器而不是应用程序服务器,但这是架构师为我们设置的平台。
我想在Tomcat启动后立即执行Java类,它将从Spring上下文加载一个类并在其上调用一些方法。
我认为最好的方法是创建一个Listener,它将使用ClassPathXmlApplicationContext从Spring上下文加载我的bean,并在其上调用所需的方法。
有更好的方法吗?
答案 0 :(得分:1)
生命周期监听器是基于某些Tomcat操作(通常是Tomcat启动或关闭)触发应用程序事件的标准方法。由于您的目标是在Tomcat启动时调用类方法,因此将此调用放在侦听器中是最有意义的。无论该侦听器调用Spring bean还是简单的POJO都是任意的,哪种方法更好;该问题的答案应根据您的申请的需要来确定,例如:你需要Spring上下文来使你应用程序的其他部分更容易构建吗?
要在侦听器中调用Spring bean,可以在web.xml中使用以下定义:
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/applicationContext.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
答案 1 :(得分:1)
您可以利用@PostConstruct
注释。这将在创建bean并在bean中注入所有必需资源后执行一个方法。这是一个示例:
@Service
public class MyBean {
@PostConstruct
public void init() {
//construction logic here...
//printing a message for demonstration purposes
System.out.println("Bean is already created and resources have been injected!");
}
}
要使用@PostConstruct
,请考虑:
@PostConstruct
装饰。public
,返回void
并且没有参数。使用这种方法,您的应用程序中不需要额外的侦听器。