8

现在直接进入我的观点,

JSP我将执行我的应用程序的初始化过程,例如,

<%! public void jsp_init(){

      //Initialise the domain server to create protocol
      //Create the logging file
}%>

现在我要从 to 重建我以前的应用Servlets程序Spring 3.2

我该怎么做Spring 3.2

我的一个colleague说我这样做initialization with Constructor of the Spring Controller

因为我已经为controller classin创建了 bean,applicationContext.xml并且我正在加载applicationContext.xml文件 withe ContextLoadListnerin web.xml

这是初始化的正确方法吗?

春天的ApplicationListener呢 ?

哪个是初始化应用程序的最佳方法spring 3.2

希望我们的堆栈用户能给出一个好的解决方案。

4

5 回答 5

9

如果配置正确,Spring 将为您做很多事情。如果你真的需要执行代码(而不是使用像 Log4J 这样自动配置的东西),我建议注册一个InitializingBean并覆盖afterPropertiesSet. 然后,您可以将此 bean 定义添加到 applicationContext.xml 文件中:

<bean id="initializer" class="com.myproject.MyInitializer" />

因此,Spring 将MyInitializer.afterPropertiesSet()在应用程序完全初始化时调用该方法。您也可以@PostConstruct在已向应用程序上下文注册的 bean 上使用注释,但不能保证在调用该方法时将初始化应用程序的其余部分。如果您希望它在所有内容都设置好后运行,那么 Initializing Bean 方法是可行的方法。我已经使用这种策略来启动需要独立于 Web 请求生命周期运行的服务器套接字等。

于 2013-07-18T15:56:37.030 回答
6

你为什么要自己初始化spring应用程序?Spring 会自动为你做:这是你告诉你的服务器初始化 spring 的方式:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/app.xml</param-value>
  </context-param>

  <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
  </listener>

这将在部署期间发生,并且所有 bean 都被定义在那里将被初始化(取决于惰性)。如果您真的想在 bean 初始化后做某事,那么在使用之前使用InitializingBean 示例将是

MyBean implements InitializingBean{
   afterPropertiesSet() {

      //do here
   }

}
于 2013-07-04T14:42:54.573 回答
2

ContextLoaderListener是启动 Spring 的一种引导程序,WebApplicationContextApplicationListener更多的是在 java 应用程序级别本身,而不是在 Web 应用程序上下文。

ContextLoaderListenerDispatcherServlet如果它有多个s 或一些 servlet/servlet 过滤器映射到不同的服务,那么它是一个很好的标准工具,用于对您的应用程序进行上下文化。基本上,为此类应用程序的不同 servlet 设置侦听器很方便,这样您就可以进行细粒度的上下文化。

我不知道您正在构建的应用程序的性质,但我假设您现在正在尝试一些基本的东西。如果是这种情况,即使在您有更复杂的设置的情况下,最好在启动时加载一个控制器来处理您的主要初始化例程,包括您的上下文化。您可以在 web.xml 中使用具有类似内容的控制器 bean:

<servlet>
    <servlet-name>your-servlet</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

每当您读取某个 url 模式时,也可以映射和调用这个 servelt,例如

@RequestMapping("/welcome")         
    public ModelAndView helloWorld() 

而在 web 部署描述符中,这一点就像您将 servlet 映射到 Spring Security 等其他 Spring 服务一样:

<servlet-mapping>
    <servlet-name>crunchify</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>

因此,您实际上并不需要使用控制器的构造函数,也不需要总是使用ContextLoaderListener其他侦听器来执行简单的初始化任务。尽管如此,学习它们的用例还是很方便的,因为您在扩展应用程序时会需要它。

在此处阅读有关调度程序 servlet 的更多信息:

http://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework/web/servlet/DispatcherServlet.html

于 2013-07-22T12:26:42.563 回答
0

您可以通过@PostConstruct在 spring 中使用 bean 并在您的 servlet-config 中注入来做到这一点。看看这里的代码和底部的一行。

<beans:bean id="PlayerImportDaoImpl"
        class="com.footieview.app.importer.dao.PlayerImportDaoImpl" />

这将在启动时注入此 bean,此 bean 上的方法具有注释@PostConstruct- 这意味着在启动时调用此方法。

于 2013-07-04T14:37:01.030 回答
0

创建一个 Spring 3 MVC 应用程序,您不需要这样做!

Spring MVC 支持 JSP,您可以通过 Annotations 进行所有配置

有关示例,请参见http://fruzenshtein.com/spring-mvc-creation-of-simple-controller-with-java-based-config/ 。

于 2013-07-18T16:19:03.623 回答