版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第一章,Spring框架简介,2,Spring简介,Spring是一个开源框架,是为了解决企业应用开发的复杂性而创建的。 目的:解决企业应用开发的复杂性。 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 。 范围:任何Java应用 。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。,3,Spring简介,轻量从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。 非侵入 在应用中,一般不需要引用springjar包里的类。
2、 控制反转Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,某一接口的具体实现类的选择控制权从调用类中移除,转交给第三方裁决。 面向切面Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的完成业务逻辑仅此而已。它们并不负责其它的系统级关注点,例如日志或事务支持。,4,Spring简介,Spring即是一个容器又是一个框架。 容器Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建基于一个可配置
3、原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例以及它们是如何相互关联的。 框架Spring提供了很多基础的与业务逻辑无关的功能,比如:事务管理、持久化框架集成等等,使用Spring框架,开发人员可以专注于业务逻辑开发,这个意义上讲它是一个框架。,5,第二章,控制反转(IOC),6,控制反转,IOC(控制反转:Inverse of Control)是Spring的内核,AOP,声明式事务等功能都建立在该功能之上,它涉及到代码解耦,设计模式,代码优化等问题的考虑。 它包括两个方面的内容:其一是控制;其二是反转。到底是什么东西的控制被反转了呢,来看个例
4、子: 导演,剧本,场景,剧中人,演员,,7,控制反转,对于软件来说:控制反转即是某一接口的具体实现类的选择控制权从调用类中移除,转交给第三方裁决。 依赖注入DI(Dependency Injection): 将调用类对接口的实现类的依赖关系由第三方注入,以移除调用类对接口实现类的依赖。,8,控制反转,public class SaveEmployeeEditAction extends SsoaAction /定义接口 public EmployeeManager employeeManager; /属性注入 public void setEmployeeManager(EmployeeMan
5、ager employeeManager) this.employeeManager = employeeManager; public String execute() throws Exception /使用接口 employeeManager.updateEmployee(ee); 第三方控制实现类 ,9,IOC类型 构造函数注入 在构造函数注入中,通过调用类的构造函数将接口实现类通过构造函数变量传入,如下代码所示 public class MenuBufferImpl public MenuBufferImpl() public MenuBufferImpl(PrivilegeDAO
6、privilegeDAO) this.privilegeDAO = privilegeDAO; /注入 ,控制反转,10,控制反转,属性注入 属性注入可以有选择地通过Setter方法完成调用类所需依赖的注入,更加灵活方便。 一般使用属性注入。 见前面例子,11,控制反转,课后扩展: 刚才看到,spring框架通过一个配置文件实现控制反转,在容器启动时根据配置文件的描述信息,自动实例化Bean并完成依赖关系的建立,从容器中即可返回准备就绪的Bean实例,以待以后使用。Spring之所以有这样的能力,主要归功于java语言本身的类反射功能,反射机制简单的说就是我们利用编程的方式实现类的实例化,大家
7、课下可以查询这方面的知识,加深对控制反转的了解。,12,BeanFactory,Spring实现控制反转是通过配置方式来实现的,主要是xml配置文件,该文件一般命名为 *-beans.xml,格式一般如下:,13,控制反转-BeanFactory,Spring通过该配置文件描述Bean及Bean之间的依赖关系,在容器启动时实例化Bean并建立Bean之间的依赖关系。Spring的Ioc容器在完成这些底层工作的基础上,还提供了Bean实例缓存、生命周期管理、Bean实例代理、事件发布、资源装载等高级服务。 BeanFactory(Bean工厂)是Spring框架最核心的接口它提供了高级Ioc的配
8、置机制,使管理不同类型的java对象成为可能。 一般我们称BeanFactory为Ioc容器。 使用如下:,14,ApplicationContext(应用上下文)建立在BeanFactory之上,提供了更多面向应用的功能,更易于创建实际应用,有时在web开发中为了方便也称ApplicationContext为Spring容器。,控制反转-ApplicationContext,15,WebApplicationContext是专门为Web应用准备的,它允许从相对于Web根目录的路径中装载配置文件完成初始化工作。从WebApplicationContext中可以获得ServletContext的
9、引用整个web应用上下文对象将作为属性放置到ServletContext中,以便Web应用环境可以访问Spring引用上下文。Spring专门提供了一个工具类WebApplicationContextUtils,通过该类的getWebApplicationContext(ServletContext sc) 方法可以从ServletCOntext中获取WebApplicationContext实例。 使用例子:,控制反转-WebApplicationContext,16,控制反转,17,控制反转-装配bean,装配一个bean 权限管理prv 上段信息提供了实例化Car和Boss这两个Bean
10、必须的信息,Ioc容器完全可以根据该信息创建者连个Bean实例。 Bean命名: 一般情况,在配置一个bean是,需要为期指定一个id属性作为Bean的名称,id在Ioc容器中必须是唯一的,此外id的命名需要满足XML对id的命名规范:必须以字母开始,逗号和空格这些非完全结束符号是非法的。如果实际使用中需要使用一些id不允许的特殊字符,可以使用bean的name属性来命名,name没有命名上的限制,几乎可以使用任何字符,如?ab,123等。 Id和name都可以指定多个名字,名字中间使用逗号、分号、或者空格进行分割, 这里为bean定义了三个名字?car1,car2,#car3,他们是一样的,
11、可以通过任何一个取得bean实例。 配置文件中不能出现相同的id,但可以出现相同的name,根据name取得bean时,以最后出现的name为准。 推荐使用id .,18,属性注入配置 使用属性注入时,bean配置方式如下: hongqi,200,2000 两种方式设置属性的值,1,通过字面值value;2,通过idref引用别的bean. 上例中name的值是car.,控制反转-装配bean,19,控制反转-装配bean,构造函数注入装配 构造函数注入通过标记完成。 1,按类型匹配入参 $barand $color $maxSpeed 2,按索引匹配入参 $barand $color $ma
12、xSpeed ,20,注入参数详解 1,字面值 即可用字符串表示的值,这些值元素标签进行注入 ,比如 hongqi 对于一些特殊符号可以使用的特殊处理标签,比如: 当然也可以使用转义序列处理特殊符号,xml中共有五个特殊符号,它们的转义序列如下: ,控制反转-装配bean,21,2, 引用其它bean idref idref元素用来将容器内其它bean的id传给或元素,同时提供错误难功能。 ref 形式一:这是最常见的形式是通过使用ref标记指定bean属性的目标bean,通过该标签可以引用同一容器或父容器内的任何bean(无论是否在同一XML文件中)。XMLbean元素的值即可以是指定的be
13、an的id值也可以是其name值。 形式二:使用ref的local属性指定目标bean,它可以利用XML解析器来难所引用的bean是否存在同一文件中。local属性值必须是目标bean的id属性值。 形式三:通过使用ref的parent属性来引用当前窗口的父容器中的bean。parent属性值即可以是目标bean的id值,也可以是name属性值。,控制反转-装配bean,22,3、内部 bean: 所谓内部bean(inner bean)是指在一个bean的或中使用元素定义的bean. 内部bean不能被其它bean引用,只能在声明处为外部bean提供实例注入。 内部bean即使提供了id,n
14、ame,scope属性也会被忽略.,控制反转-装配bean,23,4、集合合并: 从Spring2.0开始,Spring IoC容器将支持集合的合并。父子集合元素合并后的值就是子集合中的最终结果,而且子集合中的元素值将覆盖父集合中的对应的值。 supportsomecompany.co.uk 合并后内容: administrator= sales= support=supportsomecompany.co.uk list集合有排序功能,父bean的列表内容将排在子bean列表内容的前面;merge属性必须在继承的子bean中定义。,控制反转-装配bean,24,5、Nulls 用于处理nul
15、l值。Spring会把属性的空参数当作空字符串处理。 等同于 excapleBean.setEamil(); 而null值则可以使用元素来表示: ,控制反转-装配bean,25,6、简写: 针对常见的value值或bean的引用,Spring提供了简化格式用于替代和元素。、元素都支持value属性,它可以用来替代内嵌的元素。 hello = hello = hello = 和支持类似的简写属性ref,它可以替找整个内嵌的元素。 = = 切记:尽管存在等同于元素的简写形式,但并没有的简写形式。 map中的entry元素的简写形式为key/key-ref和value/value-ref属性。 =
16、Spring 建议使用简写形式,控制反转-装配bean,26,7、延迟初始化bean-lazy-init 属性: 如果一个bean被设置为延迟初始化,而另一个非延迟初始化的singleton bean依赖于它,那么当ApplicationContext提前实例化singleton bean时,它必须也确保所有上述singleton依赖bean也被预先初始化,当然也包括设置为延迟实例化的bean. 在容器层次中通过在元素上使用default-lazy-init属性来控制延迟初始化也是可能的。,控制反转-装配bean,27,8、自动装配 属性: 模式 说明 no 不使用自动装配,必须通过ref元素
17、指定依赖,这是默认设置。 byName 根据属性名自动装配。Spring将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。 byType 如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个,则抛出异常。 constructor 与byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中未找到与构造器参数类型一致的bean,那么将抛出异常。 autodetect 通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方
18、式。,控制反转-装配bean,28,Bean之间的关系 1,继承 如果多个bean存在相同的配置信息,spring允许我们定义一个父,子将自动继承父的配置信息。 200 ,控制反转-装配bean,29,2,依赖 depends-on属性可以用于当前bean初始化之前显式的强制一个或多个bean被初始化。 若需要表达对多个bean的依赖,可以在中将指定的多个bean名字用分隔符进行分隔,分隔符可以是逗号、空格及分号等。 3,引用 即前面讲的idref,控制反转-装配bean,30,循环依赖问题 Spring容器能够顺利实例化以构造函数注入进行装配的bean有一个前提:Bean构造函数入参引用的对
19、象必须已经准备就绪。由于这个机制的限制,如果两个bean都采用构造函数注入,而且都通过构造函数入参引用对方,就会发生类似于线程死锁的循环依赖问题。如下: Public class car Public car(Boss boss) this.boss=boss; Public class boss Public boss(Car car) this.car=carl; 当启动Ioc容器时,由于存在循环依赖问题,Spring容器将无法成功启动,这时我们可以混合使用函数注入和属性输入来解决该问题。即,把上面的一个函数注入改为属性注入方式。,控制反转-装配bean,31,第三章,面向切面编程(AOP
20、)基础,32,面向切面编程(AOP),AOP相关概念 连接点(Joinpoint): 程序执行的某个特定位置:比如类开始初始化前、类初始化后、某个方法调用前、调用后等。一个类或一段程序代码拥有的一些具有边界性质的特定点,这些代码中的特定点就称为“连接点”,Spring仅支持方法的连接点。 切点(Pointcut): 匹配连接点(Joinpoint)的断言。连接点相当于数据记录,切点相当于查询条件,一个切点可以匹配多个连接点。 增强(Advice): 织入到目标类连接点上的一段程序代码。 目标对象(Target): 增强逻辑的织入目标类 引介(Introduction) 引介是一种特殊的增强,为
21、类添加一些属性和方法。通过它可以动态的为业务类增加接口的实现逻辑,让业务类成为这个接口的实现类。,33,织入(Weaving): 将增强添加到对目标类具体连接点上的过程。 代理(Proxy) 一个类被AOP织入增强后,就产生了一个结果类,它是融合了原类和增强逻辑的代理类。根据不同的代理方式,代理类既可能是和原类具有相同接口的类,也可能是原类的子类,所以我们可以采用调用原类相同的方式调用代理类 切面(Aspect) 切面由切点和增强(引介)组成,它既包括了横切逻辑的定义,也包括了连接点的定义,spring AOP就是负责实施 切面的框架,它将切面定义的横切逻辑织入到切面所指定的连接点中。 AOP
22、的工作重点在于如何将增强应用于目标对象的连接点上,这包括两个工作: 1,如何通过切点和增强定位到连接点上; 2,如何在增强中编写切面的代码;,面向切面编程(AOP),34,代理机制: AOP通过动态代理技术在运行期织入增强代码,首先了解下AOP使用的两种代理机制: 1,基于JDK的动态代理 JDK1.3以后,java提供了动态代理技术,允许开发者在运行期创建接口的代理实例。 JDK动态代理主要涉及两个类, Java.lang.reflect.Proxy Java.lang.reflect. InvocationHandler InvocationHandler是一个接口,可以通过实现该接口定义的横切逻辑,并通过反射机制调用目标类的代码,动态的将横切逻辑和业务逻辑编织在一起。 Proxy利用InvocationHandler动态创建一个符合某一接口的实例,生成目标类的代理对象。 例子如下:,面向切面编程(AOP),35,2,基于CGlib的动态代理 JDK只能为接口创建代理实例,对于那些没有通过借口定义业务方法的类,可以通过CGLib创建代理实例。 CGLib采用底层字节码技术,可以为一个类创建子类,并在子类中采用方法拦截技术拦截所有父类方法的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度展览馆照明设备采购合同范本3篇
- 二零二五版建筑工程项目招投标与合同风险评估与管理协议3篇
- 二零二五年度办公室租赁合同含停车服务2篇
- 二零二五版跨区域公司间资金拆借合同范例2篇
- 二零二五年度环保设备班组工人劳务合同3篇
- 二零二五版教师临时聘用与教育品牌建设合同3篇
- 二零二五年版农业科技项目合同信用评价与推广合作合同3篇
- 二零二五年度石材矿山开采权转让合同2篇
- 二零二五版租赁合同:租赁合同信息化管理平台使用协议3篇
- 深圳汽车租赁合同模板2025版6篇
- 物业民法典知识培训课件
- 2024-2025学年山东省德州市高中五校高二上学期期中考试地理试题(解析版)
- TSGD7002-2023-压力管道元件型式试验规则
- 2024年度家庭医生签约服务培训课件
- 建筑工地节前停工安全检查表
- 了不起的狐狸爸爸-全文打印
- 派克与永华互换表
- 第二章流体静力学基础
- 小学高年级语文作文情景互动教学策略探究教研课题论文开题中期结题报告教学反思经验交流
- 春节新年红灯笼中国风信纸
- 注塑件生产通用标准
评论
0/150
提交评论