spring和spring mvc父子容器--学习笔记
2017-02-25 09:13
375 查看
在说父子容器之前,咱们首先了解什么是容器:
java容器:
可以管理对象声明周期,对象间的依赖关系。还可以配置对象名称,属性,产生方式等。不用程序员自己编写程序来管理。
java中常用的容器类有:List、HashMap、HashTable等。
spring容器:
借用以为博主的总结:
spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。他们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并且管理容器中的Bean。
Bean是Spring管理的基本单位,在基于Spring的Java EE应用中,所有的组件都被当成Bean处理,包括数据源、hibernate的SessionFactory、事务管理器等。在Spring中,Bean的是一个非常广义的概念,任何的Java对象、Java组件都被当成Bean处理。
了解了什么是容器,接下来就进入正题:
在一个项目中,容器不一定只有一个,就拿我正在学习的ssm框架来说:spring可以包含多个容器,比如说springmvc容器。在搭建项目的时候我们做了好多的配置:
比如:在springmvc.xml中配置了一个扫描包,扫描controller中的注解。(后边的mvc:annotation-driven代表使用注解驱动,可以不写)
又比如:在service.xml中配置了扫描包,要扫描service中的注解
那问题就来了,既然spring容器是一个大的容器,那我可不可以,写一个全局扫描包把service/dao/controller都扫描到spring容器中呢?这样会不会更方便一点不用配置那么多的xml文件?
针对这个问题,我们一起来学习一下:
Spring
是一个容器,springmvc也是一个容器。他们两者之间是父子容器关系。springmvc是子容器,包含在spring容器中。在项目中的配置如下:
我们在web.xml中配置了一个spring容器:用Listener加载初始化srping容器(这是一个大的容器)
还配了一个springmvc的前端控制器:(这是一个包含在springmvc中的一个容器。而springmvc又包含在spring容器中)
就相当于:service.dao在spring容器中,controller在springmvc容器中。
父子容器约定如下:
1、子容器可以访问父容器中的对象:
也就是service
可以注入到controller中。
但反过来,controller就不可以注入到service中。
当然,如果controller和service在一个容器中,就可以注入。
2、父容器不可以访问子容器中的对象:
如果我们在spirng中配置一个全局的扫描包,spring容器会把service,controller,dao都扫描放入spring这个大的容器中。这样导致,springmvc中就没有对象了,页面访问找不到对应的controller,就会报404错误。
相反,如果我们在springmvc中写一个扫描包,把service、dao都注入到springmvc中,(也就是把spingmvc.xml中扫描包中的.controller去掉)是没有问题的。因为springmvc也是一个spring容器。
3、我们为什么要用spring加springmvc呢?
当然是为了系统以后的扩张方便。spring可以整合多个框架,这样我们后边如果想再加入一个struts到spring容器里面,也是可以的。
4、我们可不可以把事务配置到controller中?
如果是spirng+springmvc这个架构是不可以,因为事务管理器是在spring中配置的,在父容器中是访问不了springmvc子容器中的controller的。所以不可以。
但是如果把所有扫描包都配置到springmvc中,那么在controller是可以配置事务的。
所以结论如下:不可以在service.xml中配置一个全局扫描包来使用。
了解了父子容器,我们在搭建框架的时候,就会很容易的知道,我要配置什么,配置到哪些地方。就会更深一步的了解框架的原理。
课外拓展:
我在上网查询父子容器的时候,发现了两派配置容器的使用。
第一派:网友称为传统派,就是spring+springmvc的配置。和我上面讲的一样。没什么可说的
第二派:叫激进派,就是把所有东西都配置到springmvc中,不要service或者dao层的接口,把做项目一全套的数据源啦,事务啦,dao啦,service啦,都配置到子容器中。
大家了解就行,也可以尝试配置一下:
http://blog.csdn.net/user_xiangpeng/article/details/52181710
java容器:
可以管理对象声明周期,对象间的依赖关系。还可以配置对象名称,属性,产生方式等。不用程序员自己编写程序来管理。
java中常用的容器类有:List、HashMap、HashTable等。
spring容器:
借用以为博主的总结:
spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。他们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并且管理容器中的Bean。
Bean是Spring管理的基本单位,在基于Spring的Java EE应用中,所有的组件都被当成Bean处理,包括数据源、hibernate的SessionFactory、事务管理器等。在Spring中,Bean的是一个非常广义的概念,任何的Java对象、Java组件都被当成Bean处理。
了解了什么是容器,接下来就进入正题:
在一个项目中,容器不一定只有一个,就拿我正在学习的ssm框架来说:spring可以包含多个容器,比如说springmvc容器。在搭建项目的时候我们做了好多的配置:
比如:在springmvc.xml中配置了一个扫描包,扫描controller中的注解。(后边的mvc:annotation-driven代表使用注解驱动,可以不写)
又比如:在service.xml中配置了扫描包,要扫描service中的注解
那问题就来了,既然spring容器是一个大的容器,那我可不可以,写一个全局扫描包把service/dao/controller都扫描到spring容器中呢?这样会不会更方便一点不用配置那么多的xml文件?
针对这个问题,我们一起来学习一下:
Spring
是一个容器,springmvc也是一个容器。他们两者之间是父子容器关系。springmvc是子容器,包含在spring容器中。在项目中的配置如下:
我们在web.xml中配置了一个spring容器:用Listener加载初始化srping容器(这是一个大的容器)
还配了一个springmvc的前端控制器:(这是一个包含在springmvc中的一个容器。而springmvc又包含在spring容器中)
就相当于:service.dao在spring容器中,controller在springmvc容器中。
父子容器约定如下:
1、子容器可以访问父容器中的对象:
也就是service
可以注入到controller中。
但反过来,controller就不可以注入到service中。
当然,如果controller和service在一个容器中,就可以注入。
2、父容器不可以访问子容器中的对象:
如果我们在spirng中配置一个全局的扫描包,spring容器会把service,controller,dao都扫描放入spring这个大的容器中。这样导致,springmvc中就没有对象了,页面访问找不到对应的controller,就会报404错误。
相反,如果我们在springmvc中写一个扫描包,把service、dao都注入到springmvc中,(也就是把spingmvc.xml中扫描包中的.controller去掉)是没有问题的。因为springmvc也是一个spring容器。
3、我们为什么要用spring加springmvc呢?
当然是为了系统以后的扩张方便。spring可以整合多个框架,这样我们后边如果想再加入一个struts到spring容器里面,也是可以的。
4、我们可不可以把事务配置到controller中?
如果是spirng+springmvc这个架构是不可以,因为事务管理器是在spring中配置的,在父容器中是访问不了springmvc子容器中的controller的。所以不可以。
但是如果把所有扫描包都配置到springmvc中,那么在controller是可以配置事务的。
所以结论如下:不可以在service.xml中配置一个全局扫描包来使用。
了解了父子容器,我们在搭建框架的时候,就会很容易的知道,我要配置什么,配置到哪些地方。就会更深一步的了解框架的原理。
课外拓展:
我在上网查询父子容器的时候,发现了两派配置容器的使用。
第一派:网友称为传统派,就是spring+springmvc的配置。和我上面讲的一样。没什么可说的
第二派:叫激进派,就是把所有东西都配置到springmvc中,不要service或者dao层的接口,把做项目一全套的数据源啦,事务啦,dao啦,service啦,都配置到子容器中。
大家了解就行,也可以尝试配置一下:
http://blog.csdn.net/user_xiangpeng/article/details/52181710
相关文章推荐
- 【Spring学习笔记-5.1】Spring容器-父子容器
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.5 Bean的生命周期
- Spring2.5学习笔记1-控制反转-DI容器泛型访问
- spring MVC学习笔记(二) springMVC.xml配置文件解析
- spring学习笔记:Spring IOC容器的通俗认识
- 【Spring学习笔记-3.1】让bean获取spring容器上下文(applicationContext.xml)
- spring学习笔记:spring mvc不得不说的几处配置
- 【Spring学习笔记】之【2.2 容器基本原理】
- java个人学习笔记:spring 容器
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- 【Spring学习笔记】Spring框架的IoC容器学习笔记
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- [Spring学习笔记 1 ] Spring 简介,初步知识--Ioc容器详解 基本原理。
- spring学习笔记:Spring IOC容器,Spring源码
- Spring2.5学习笔记1-控制反转-DI容器配置元数据方式
- spring学习笔记1--概述与spring容器的实例化
- spring学习笔记:spring mvc的处理流程
- [Spring学习笔记 1 ] Spring 简介,初步知识--Ioc容器详解 基本原理。
- Spring3学习笔记之(spring core之IoC容器基本原理)
- Spring视频学习笔记(1)IoC容器