SpringBean重复执⾏两次(实例被构造两次)问题分析
  在《》⼀⽂中,我们知道l两处配置⽂件正常需分开。如下所⽰:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="java.sun/xml/ns/j2ee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="java.sun/xml/ns/j2ee
java.sun/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>SpringMVC</display-name>
param name
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/l;/l</param-value>
</context-param>
<listener>
<listener-class>org.t.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/l</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
  其中,如下配置:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/l</param-value>
</context-param>
  因为该节点指派的applicationContext*.xml是⽤于实例化除servlet之外的所有对象的,可以说项⽬中绝⼤多数的service和dao层操作都由ContextLoaderListener传递给Spring来进⾏实例化。
  ⽽如下配置:
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
  这个是⽤来处理所有servlet的,没有它就⽆法通过请求地址来调⽤相应的Controller。如果不指定,则会按照注释中所描述地那样⾃动加载"⼯程名-l"配置⽂件。⽆论是l还是applicationContext*.xml都可以按照<beans>...<bean id="XXX" class="XXX" />...</beans>这样的形式来配置。
  问题来了,有时候不注重对象初始化的分类,尤其是使⽤<context:component-scan base-package="controller" />这样的包扫描形式统⼀初始化,很容易造成满⾜条件的对象被初始化两次,那么在计划任务的时候被执⾏两次也就不奇怪了。其实说来说去,还是要提醒⼤家,不同的配置⽂件其作⽤是不⼀样的,不要将所有的初始化操作都放到⼀个配置⽂件中,更不要重复配置。不仅浪费资源,还很容易导致莫名其妙的故障。
  详细请见阅读《》。
  SpringMVC⼯程因此做了拆分,拆分的⼯程代码详见附件《SpringMVC.rar》。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。