Spring 结构
Spring框架主要由7大模块组成,它们提供了企业级开发需要的所有功能,而且每个模块都可以单独使用,也可以和其它模块组合使用,灵活且方便的部署可以使开发的程序更加简单灵活。

核心模块
Spring Core模块是Spring的核心容器,它实现了IoC模式、提供了Spring框架的基础功能。在模块中包含最重要的BeanFactory类是Spring的核心类,负责对JavaBean的配置与管理。它采用Factory模式实现了IoC容器即依赖注入。
Content模块
Spring Content模块继承BeanFactory(或者说Spring核心)类,并且添加了事件处理、国际化、资源装载、透明装载以及数据效验等功能。它还提供了框架式的bean的访问模式和很多企业级的功能,如JNDI访问、支持EJB、远程调用、继承模板框架、Email和定时任务调度等。
AOP 模块
Spring集成了所有AOP功能。通过事务管理可以使任意Spring管理的对象AOP化。Spring提供了标准Java语言编写的AOP框架,它的大部分内容都是根据AOP联盟的API而开发的。它使应用程序抛开了EJB的复杂性,但拥有传统EJB的关键功能。
DAO模块
DAO模块提供了JDBC的抽象层,简化了数据厂商的异常错误(不再从SQLException继承大批代码),大幅减少了代码的编写,并且提供了声明式事务和编程式事务的支持。
O/R映射模块
Spring ORM模块提供了对现有ORM框架的支持,各种流行的ORM框架已经做得非常成熟,并且拥有大规模的市场(如Hibernate)。Spring没必要开发新的ORM工具,但是它对Hibernate提供了完美的整合功能,同时也支持其它的ORM工具。
Web模块
Spring Web模块建立在Spring Context基础之上,它提供了Servlet监听器的Context 和Web 应用的上下文。对现有的Web框架如JSF、Tapestry、Struts2等提供了集成。
MVC模块
Spring MVC模块建立在Spring核心功能之上,这使它拥有Spring框架的所有特性,能够适应多种视图、模板技术、国际化和验证服务,实现控制逻辑和业务逻辑清晰的分离。
使用BeanFactory管理bean
BeanFactory采用了Java经典的工厂模式,通过从XML配置文件或属性文件(.properties)中读取JavaBean的定义,来实现JavaBean的创建、配置和管理。BeanFactory有很多实现类,其中XmlBeanFactory可以通过流行的XML文件格式读取配置信息里装载JavaBean。BeanFactory在Spring中的作用:

装载bean:
Resource resource = new ClassPathResource("applicationContext.xml"); //装载配置文件
BeanFactory factory = new XmlBeanFactory(resource) ;
Test test = factory.getBean("test") ; //获取bean
ClassPathResource读取XML文件并传参给XmlBeanFactory, applicationContext.xml文件中的代码包含一个bean标签
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN“ "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="test" class="com.model.Test">
</beans>
在<beans>标签中通过<bean>标签定义JavaBean的名称和类型,在程序代码中利用BeanFactory的getBean()方法获取JavaBean的实例并且向上转为需要的接口类型,这样在容器中就开始了这个JavaBean的生命周期。BeanFactory在调用getBean()方法之前不会实例化任何对象,只有在需要创建JavaBean的实例对象时,才会为其分配资源空间。这使它更适合于物理资源受限的应用程序,尤其是内存限制的环境。Spring中bean的声明周期包括实例化JavaBean、初始化JavaBean、使用JavaBean和销毁JavaBean4个阶段。
ApplicationContext 的应用
BeanFactory实现了IoC控制,所以它可以称为IoC容器,而ApplicationContext扩展了BeanFactory容器并添加了对I18N(国际化)、声明周期事件的发布监听等更加强大的功能,使之成为Spring中强大的企业级IoC容器。在这个容器中提供了对其它框架和EJB的集成、远程调用、WebService、任务调度和JNDI等企业级服务,同时也允许使用更多的声明式方式来得到需要的功能。在Spring应用中大多采用ApplicationContext容器来开发企业级的程序。
ApplicationContext 接口有3个实现类,可以实例化其中任何一个类来创建Spring的ApplicationContext容器。第一个类是ClassPathXmlApplicationContext类。它从当前路径中检索配置文件并装载它来创建容器的实例。语法:
ApplicationContext context = new ClassPathXMLApplicationContext(String configLocation);
其中的configLocation参数指定了Spring配置文件的名称和位置。
第二个实现类是:FileSystemXMLApplicationContext类。它和ClassPathXMLApplicationContext类的区别在于读取Spring配置文件的方式,它不再从类路径中获取配置文件,而是通过参数指定配置文件的位置,可以获取类路径之外的资源。语法:
ApplicationContext context = new FileSystemXMLApplicationContext(String configLocaation);
第三个实现类是:WebApplicationContext类。它是Spring的Web应用容器,有两种方法可以在Servlet中使用WebApplicationContext。第一种方法是在Servlet的web.xml稳健者配置Spring的ContextLoaderListener监听器;第二种方法是修改web.xml配置文件,在配置文件中添加一个Servlet,定义使用Spring的org.springframework.web.context.ContextLoaderServlet类。
JavaBean在ApplicationContext容器和BeanFactory容器中的生命周期基本相同。如果在JavaBean中实现了ApplicationContext接口,容器会调用JavaBean的setApplicationContext()方法将容器本身注入到JavaBean中,使JavaBean包含容器的应用。
Spring 结构的更多相关文章
- MyBatis学习系列三——结合Spring
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...
- SpringMVC入门二: 1规范结构, 2简单整合MyBatis
昨天拿springMVC写的helloworld结构不好, 这次先调整一下体系结构 , 然后简单整合一下MyBatis spring的配置还是以注解为主, 不过MyBatis的映射文件什么的还是拿xm ...
- Spring笔记01_下载_概述_监听器
目录 Spring笔记01 1.Spring介绍 1.1 Spring概述 1.2 Spring好处 1.3 Spring结构体系 1.4 在项目中的架构 1.5 程序的耦合和解耦 2. Spring ...
- spring源码解析1--spring整体架构
一.Spring整体架构图 关于Spring的基本介绍就不再赘述了,先展示Spring框架的整体架构图如下示: 二.Spring结构介绍 Spring主要分为Core Container.Test.D ...
- Spring 学习——Spring框架结构、概念
maven项目结构 记忆:在一个项目中,project下一层级时src,也就是源文件,所有需要进行编译的文件都是在这个目录下,其实也就是这一个目录,然后向下扩展.在src目录下,存在main文件夹,里 ...
- spring项目中web-inf下不能引用页面资源
1.spring项目结构 2.spring结构说明 web-inf目录是不对外开放的,外部没办法直接访问到(即通过url访问),只有通过映射来访问,如映射一个action或servlet通过服务器端跳 ...
- spring framework体系结构及模块jar依赖关系
本文对于Spring的JAR包使用和配置,结合网友材料以spring 4.3.6.RELEASE版本为例,介绍spring框架结构和各模块对应JAR包以及模块间JAR依赖关系. 注:不同版本JAR包依 ...
- Spring学习总结(1)- IOC
一.Spring框架概述 Spring是一个开源免费的框架,为了解决企业应用开发的复杂性而创建.Spring框架是一个轻量级的解决方案,可以一站式地构建企业级应用.Spring是模块化的,所以可以只使 ...
- 初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
随机推荐
- ES6字符串操作讲解(详细),字符串编码表,代码单元,码点的详细介绍。
以前用到字符串的方法时候,并不会深刻的去思考其中的原理,所以在es6新增的这些方法里就有点蒙圈了,于是想要搞清楚为什么会新增这些方法,以及如何使用这些方法. 在博客园上看见一篇大神SamWeb的总结, ...
- tera term 的一个命令解析脚本
;用虚拟串口虚拟2个串口,tera term使用串口2 ;设置串口2 波特率 115200,超时500ms;如果收到串口发来OK则回复SUCCESS;如果收到ERROR则回复faile;若超时则发送t ...
- vue.js2.0实战填坑记录
访https://github.com/bailicangdu/vue2-elm的PC商城 在创建的 router 对象中,如果不配置 mode,就会使用默认的 hash 模式,该模式下会将路径格式化 ...
- C# 枚举类型的描述信息获取
新建一个控制台方法,写好自己的枚举类型: 如图: 在里面添加获取描述的方法: 具体源码: 链接:http://pan.baidu.com/s/1nv4rGkp 密码:byz8
- sql server 时间查询
select CONVERT(varchar, getdate(),8 ) --获取当前时间时分14:13:59 select CONVERT(varchar, getdate(),23 ) - ...
- Django2.0路由补充之path,re_path及视图层
以下是Django2.0版本 正则捕获到的参数都是字符串,所以如果函数需要用的其他数据类型,可以在函数中直接转换,也可以在路由中直接转换,如下: 下面实例是匹配整数,传过去的参数就是整数 from d ...
- 双飞翼布局介绍-始于淘宝UED-2011年淘宝玉伯写的
仔细分析各种布局的技术实现,可以发现下面三种技术被经常使用: 浮动 float 负边距 negative margin 相对定位 relative position 这是实现布局的三个最基本的原子技术 ...
- Eclipse下对MAVEN进行junit软件测试
一.Maven project management and build automation tool, more and more developers use it to manage the ...
- MySQL出现GROUP BY clause错误解决办法
#1)当mysql数据库出现如下错误:#which is not functionally dependent on columns in GROUP BY clause; this is incom ...
- HDU 4003 Find Metal Mineral (树形DP,经典)
题意:给定一棵树图,n个节点,有边权,要派k<11个机器人从节点s出发,遍历所有的点,每当1只机器人经过1条边时就会花费该边的边权,边是可重复走的.问遍历完所有点的最小花费? 思路: 非常经典, ...