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 ...
随机推荐
- Ubuntu下修改权限时出现"unable to execute /bin/chmod: Argument list too long"
Ubuntu14.04下修改权限时出现"unable to execute /bin/chmod: Argument list too long" ,大概意思是卧槽,你这参数也 ...
- php中3DES加密技术
因为工作中要用到加密,接口中要求也是用密文传输数据,用到3des加密,就研究了一下. 在网上也找了好多,但是都不可以用,没法正式运行,终于找到一个可以运行的,自己又修改了一下,记录下来,以后还可能会用 ...
- curl请求模拟post发送json
示例:curl -X POST --header "Content-Type:application/json" --data '{"name":"s ...
- 2019/05/11 JAVA虚拟机原理
所谓虚拟机,就是一台虚拟的机器.他是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为 系统虚拟机和程序虚拟机, 大名鼎鼎的Visual Box.Vmare就属于系统虚拟机,他们完全是对物理计 ...
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
内存分配方式 内存分配方式有三种: [1] 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量, static 变量. [2] 在栈上创建.在执行函 ...
- log4sql介绍
log4sql介绍log4j环境中简单配置的情况下可收集执行的SQL语句和JDBC执行情况,如预编译的”?“显示成参数的实际值 下载log4sql.jar第一步:http://log4sql.sour ...
- 解决 FusionCharts3.2.1 首页无法载入的问题
在实际项目中测试FusionCharts3.2.1时,发现首次载入无法正常载入,第二次载入就恢复正常! 原因:FusionCharts ID与变量名重复 以下是正常写法: var member ...
- Xmind几个有用的技巧
Xmind是一个很好的思维导图工具,是学习研究总结的好帮手. Xmind功能很丰富,这里只是简要列出几个比较有用的技巧. 1.善用属性 选中一个xmind元素(专业名词叫[主题])后,一般在右下角会出 ...
- 忘记Centos7.2下root用户密码后的处理方式
1)重启系统 重新启动系统后并按f2键,进入如下的界面,再按e键. 2)修改启动内核代码 在代码的linux16行中,将ro rhgb的ro修改为rw init=/sysroot/bin/sh. 3) ...
- 洛谷 P2935 [USACO09JAN]最好的地方Best Spot
题目描述 Bessie, always wishing to optimize her life, has realized that she really enjoys visiting F (1 ...