第四章 IoC容器

4.1 IoC概述

  IoC(Inverse of Control 控制反转),控制是指接口实现类的选择控制权,反转是指这种选择控制权从调用类转移到外部第三方类或容器的手中。

  也就是由Spring容器借由Bean配置来进行控制。

  DI(Dependency Injection 依赖注入):让调用类的某一接口实现类的依赖关系由第三方容器注入,以移除调用类对某一接口实现类的依赖。

  由于IoC的概念不太好理解,所以用DI这个概念来代替IoC。

第三方容器:

  它帮助完成类的初始化和装配工作,让开发者从这些底层实现类的实例化、依赖关系装配等工作中解脱出来,专注于更有意义的业务逻辑开发工作。

  Spring容器通过配置文件或注解描述类与类之间的依赖关系,自动完成类的初始化和依赖注入工作。

4.4 BeanFactory和ApplicationContext

第五章 在IoC容器中装配Bean

  在实际应用中,大部分Bean都能以单实例的方式运行,所以Spring将Bean的默认作用域定位singleton。

  默认下,ApplicationContext容器在启动时,自动实例化所有singleton的Bean并缓存于容器中。

  采用scope=“prototype”指定非单例作用域的Bean。

使用注解定义Bean:

自动装配Bean:

  @AutoWired默认按类型匹配的方式在容器中查找匹配的Bean。

  如果希望Spring即使找不到匹配的Bean完成注入也不要抛出异常,那么可以使用@AutoWired(required=false)进行标注。

  如果容器中有一个以上匹配的Bean时,则可通过@Qualifier注解限定Bean的名称。如:@Qualifier("baseDao")。

  虽然Spring支持在属性和方法上标注@AutoWired,但实际开发中建议在方法上标注@AutoWired,因为这样更加面向对象,也方便单元测试的编写。

延迟依赖注入:

  Spring4.0支持,在Bean上标注@Lazy@AutoWired,不会立即注入属性,而是延迟到调用此属性时才注入属性。

对标准注解的支持:

  @Resource和@Inject这两个注解和@AutoWire类似。

  @Resource默认按名称匹配注入Bean,要求提供一个Bean名称的属性,如果属性为空,则自动采用标注处的变量名或方法名作为Bean的名称。

  @Inject和@AutoWire同样也是按类型匹配注入Bean的,只不过没有required属性。

Bean的作用范围:

第七章 Spring AOP基础

  AOP(Aspect Oriented Programing 面向切面编程)

  无法通过抽象父类的方法消除重复的横切代码,因为横切逻辑依附在业务类方法的流程中,不能转移到其他地方去。

  AOP将这些分散在各个业务逻辑代码中的相同代码通过横向切割的方式抽取到一个独立的模块中。

  当某个方法需要进行性能监测时,要在业务代码的前后加上开启/关闭性能监测的代码。这些非业务逻辑代码破坏了业务逻辑的纯粹性。

  我们希望通过代理的方式将性能监测的横切代码从业务类中完全移除,并通过动态代理技术将横切代码动态织入目标方法的相应位置。

连接点和切点:

  连接点是程序执行的某个特定位置,如类初始化前,类初始化后,方法调用前,方法调用后。

  连接点相当于数据库中的记录,切点相当于查询条件,一个切点可以匹配多个连接点。

增强(Advice):

  增强既包含用于添加到目标连接点上的一段执行逻辑,又包含用于定位连接点的方位信息。

  增强接口如:BeforeAdvice、AfterReturningAdvice

织入:

  织入是将增强添加到目标类的具体连接点上的过程。

  Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。

切面(Aspect):

  切面由切点和增强组成,Spring AOP是负责实施切面的框架,它将切面所定义的横切逻辑织入切面所指定的连接点中。

增强类型:

  前置增强(BeforeAdvice):在目标方法执行前实施增强。

  后置增强(AfterReturningAdvice):在目标方法执行后实施增强。

  环绕增强(MethodInterceptor):在目标方法执行前后实施增强。

  异常抛出增强(ThrowsAdvice):在目标方法抛出异常后实施增强。

  引介增强(IntroductionInterceptor):在目标类中添加一些新的方法和属性。

切面类型:

  Advisor:一般切面,仅包含一个Advice,它代表的横切的连接点是所有目标类的所有方法,太宽泛,一般不用。

  PointcutAdvisor:具有切点的切面,可以通过类、方法名、方法方位等信息灵活定义切面的连接点。

  IntroductionAdvisor:引介切面,对应引介增强的特殊切面,应用于类层面上。

  Spring采用JDK动态代理和CGLib动态代理技术在运行期织入增强。

  Spring只能在方法级别上织入增强。

第八章 基于@AspectJ和Schema的AOP

注解版增强类型:

  @Before:前置增强

  @AfterReturning:后置增强

  @Around:环绕增强

  @AfterThrowing:抛出增强

  @After:Final增强,不管抛出异常还是正常退出,该增强都会得到执行

  @DeclareParents:引介增强

第十一章 Spring的事务管理

  Spring允许通过声明方式,在IoC配置中指定事务的边界和事务属性,Spring自动在指定的事务边界上应用事务属性。

  Spring的声明式事务管理是通过SpringAOP实现的。

  如果使用Spring JDBC和My Batis,可以使用DataSource TransactionManager这个基于数据源的事务管理器。

  Spring通过模板类降低了开发者使用各种数据持久化技术的难度。

  模板类需要绑定数据连接或会话的资源,这些资源是非线程安全的。

  Spring使用ThreadLocal解决线程安全的问题。

Spring事务传播行为:

  Spring默认的事务回滚规则为:运行期异常回滚,检查型异常不回滚。

使用注解配置声明式事务:

  使用@Transactional对类或方法进行事务增强的标注。

  在配置文件中加入<tx:annotation-driven transaction-manager="txManager"/>,对标注@Transactional的Bean进行加工处理,以织入事务管理切面。

第十七章 Spring MVC

 

《精通Spring 4.x 企业应用开发实战》学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. 微信接口开发之高级篇系列【微信JS-SDK】

    PHP微信公众平台开发高级篇—微信JS-SDK 第一步.绑定域名: 第二步.引入JS文件: 第三部.通过Config接口注入权限验证配置 第四部.通过Read接口处理成功验证 第五部.通过Error接 ...

  2. python 面试题--你能做出多少?

    python3中__get__,getattr,__getattribute__的区别 什么是 GIL 详细博客 GIL = Global Intercept Lock 全局解释器锁,任意时刻在解释器 ...

  3. es6三个点运算符

    ...扩展运算符:可以将数组或对象里面的值展开 const b = {a:1,b:2} console.log({...b,c:3}); //{a:1,b:2,c:3} 一定程度上可以替代apply方 ...

  4. python 小程序,猜年龄

    要求如下:

  5. oracle乱码记录

    plsql中显示正常,查询到的结果乱码 1.获得服务端编码 select * from nls_database_parameters where parameter ='NLS_CHARACTERS ...

  6. SSM-1第一章 认识SSM框架和Redis

    第一章 认识SSM框架和Redis   1.1 Spring框架 Sring理念  Ioc  控制反转  IOC是一个容器,在Spring中,它会认为一切Java资源都是JavaBean,容器的目标是 ...

  7. 键盘按键js效果

    <input id="name" type="text" > JS: <script> document.onkeydown = fun ...

  8. 字典取KEY,占位符,延迟刷新

    flash 监听事件者 与 事件发出者 比如说现在有A和B,A.addChild(B)A监听鼠标点击事件那么当点击B时,target是B,currentTarget是A也就是说,currentTarg ...

  9. POJ1258 Agri-Net【最小生成树】

    题意: 有n个农场,已知这n个农场都互相相通,有一定的距离,现在每个农场需要装光纤,问怎么安装光纤能将所有农场都连通起来,并且要使光纤距离最小,输出安装光纤的总距离. 思路: 又是一个最小生成树,因为 ...

  10. Jetson tx1 安装ROS

    注意,是 Jetson TX1 系统版本: R24.2 参考链接: https://www.youtube.com/watch?v=-So2P0kRYsk