Spring Bean重复执行两次(实例被构造两次)问题分析

阅读更多

  在《Spring Bean重复执行两次(实例被构造两次)问题分析》一文中,我们知道web.xml两处配置文件正常需分开。如下所示:



   
	SpringMVC
	
	
		contextConfigLocation
		/WEB-INF/applicationContext.xml;/WEB-INF/task.xml
	
	
	
		org.springframework.web.context.ContextLoaderListener
	
	
	
		encodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			UTF-8
		
		
			forceEncoding
			true
		
	
	
		encodingFilter
		/*
	

	
		springMVC
		org.springframework.web.servlet.DispatcherServlet  
		  
            contextConfigLocation  
            /WEB-INF/springMVC-servlet.xml  
        
		1
	
	
		springMVC
		/
	
  

  其中,如下配置:


    contextConfigLocation
    /WEB-INF/springMVC-servlet.xml

  因为该节点指派的applicationContext*.xml是用于实例化除servlet之外的所有对象的,可以说项目中绝大多数的service和dao层操作都由ContextLoaderListener传递给Spring来进行实例化。

  而如下配置:


    springMVC
    org.springframework.web.servlet.DispatcherServlet
    1

  这个是用来处理所有servlet的,没有它就无法通过请求地址来调用相应的Controller。如果不指定,则会按照注释中所描述地那样自动加载"工程名-servlet.xml"配置文件。无论是servletContext.xml还是applicationContext*.xml都可以按照......这样的形式来配置。

  问题来了,有时候不注重对象初始化的分类,尤其是使用这样的包扫描形式统一初始化,很容易造成满足条件的对象被初始化两次,那么在计划任务的时候被执行两次也就不奇怪了。其实说来说去,还是要提醒大家,不同的配置文件其作用是不一样的,不要将所有的初始化操作都放到一个配置文件中,更不要重复配置。不仅浪费资源,还很容易导致莫名其妙的故障。

  详细请见阅读《Spring Bean重复执行两次(实例被构造两次)问题分析》。

  SpringMVC工程因此做了拆分,拆分的工程代码详见附件《SpringMVC.rar》。

  • SpringMVC.rar (8.9 MB)
  • 下载次数: 4

你可能感兴趣的:(spring,java,web)