框架整合——Spring与SpringMVC框架整合步骤与优势讲解

Spring与SpringMVC整合!

  问:实际上SpringMVC就运行在Spring环境之下,还有必要整合么?SpringMVCSpring都有IOC容器,是不是都需要保留呢?

  答案是:通常情况下,类似于数据源,事务,整合其他框架都是放在spring的配置文件中(而不是放在SpringMVC的配置文件中),实际上放入Spring配置文件对应的IOC容器中的还有ServiceDao.SpringMVC也搞自己的一个IOC容器,在SpringMVC的容器中只配置自己的Handler(Controller)信息。所以,两者的整合是十分有必要的,SpringMVC负责接受页面发送来的请求,Spring框架则负责整理中间需求逻辑,对数据库发送操作请求,对数据库的操作目前则先使用Spring框架中的JdbcTemplate进行处理。

1.导入SpringSpringMVC的所有jar

c3p0-0.9.1.2.jar

com.springsource.net.sf.cglib-2.2.0.jar

com.springsource.org.aopalliance-1.0.0.jar

com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

commons-logging-1.1.3.jar

mysql-connector-java-5.1.37-bin.jar

spring-aop-4.0.0.RELEASE.jar

spring-aspects-4.0.0.RELEASE.jar

spring-beans-4.0.0.RELEASE.jar

spring-context-4.0.0.RELEASE.jar

spring-core-4.0.0.RELEASE.jar

spring-expression-4.0.0.RELEASE.jar

spring-jdbc-4.0.0.RELEASE.jar

spring-orm-4.0.0.RELEASE.jar

spring-tx-4.0.0.RELEASE.jar

spring-web-4.0.0.RELEASE.jar

spring-webmvc-4.0.0.RELEASE.jar

 

2.web.xml文件中分别配置SpringMVCSpring的配置信息

  

   
     
		contextConfigLocation
		
		classpath:Spring.xml
	
	
	
		org.springframework.web.context.ContextLoaderListener
	


	
	
		springDispatcherServlet
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
              
              classpath:SpringMVC.xml
		
		1
	
	
	
		springDispatcherServlet
		/
	


	
	
		CharacterEncodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			UTF-8
		
	
	
		CharacterEncodingFilter
		/*
	


	
	
		HiddenHttpMethodFilter
		org.springframework.web.filter.HiddenHttpMethodFilter
	
	
		HiddenHttpMethodFilter
		/*
	

  

3.配置spring的配置文件和springmvc的配置文件

 spring的配置文件:

 













  

  

  

  



 





  









  

  


 

  

 

springmvc的配置文件:   






  
  










  

 加入jdbc.properties文件:

jdbc.user=root

jdbc.passowrd=123456
jdbc.url=jdbc:mysql://localhost:3306/jdbc_template
jdbc.driver=com.mysql.jdbc.Driver

  

4.创建Controller类与Service类,并创建这两个类的无参构造器,分别输出一句话!

5.启动项目,会发现controller构造器和service构造器都执行了两次!

问题:若SpringIOC容器和SpringMVCIOC容器扫描的包有重合的部分,就会导致有的bean会被创建2次!

解决:

    1.使SpringIOC容器扫描的包和SpringMVCIOC容器扫描的包没有重合的部分!

    controller层都在controller包,service层都在service

 2.但是有的时候开发的时候是分模块开发的,这样不太容易做到,所以:

    可以在component-scan标签下面中使用如下子标签来规定只能扫描的注解:


  
  

  

  所以在springMVC的配置文件中我们可以按着如下配置,只扫描controllerControllerAdvice注解:


  
  
  
  

  

  而在spring的配置文件中:


  
  
  
  

   此时再重新启动项目就会发现springspringmvc的对象都创建了一份!

 

6.SpringIOC容器和SpringMVCIOC容器的关系

框架整合——Spring与SpringMVC框架整合步骤与优势讲解_第1张图片

外边beans.xml为Spring的配置文件,黄色方格Spring-mvc.xml为SpringMVC的配置文件

注意:

1.SpringMVC容器中的bean可以引用Spring容器中的bean也就是在Controller中我们可以注入service层对象【可以在controller层的requestMapping方法中打印service对象试一下】!

2.反之则不行,就是说:在spring扫描的service层不能引用springmvchandler(Controller)对象【注解一个小例子,启动项目就会出错】

3.实际上Spring的容器和Spring容器有父子间关系,【参考图片】就像儿子可以继承父亲的基因一样,父亲没法继承儿子的基因!

  而且从另一个角度也说明了Handler(Controller)是可以依赖Service层的,但是Service层却不可以依赖Handler(Controller)层!

你可能感兴趣的:(框架整合——Spring与SpringMVC框架整合步骤与优势讲解)