Spring IoC 与 AOP


一、IoC (Inversion of Control),控制反转

获取依赖对象(Spring Bean)方式反转。

  • 正转:在对象中主动控制去直接获取依赖对象。
  • 反转:由容器来帮忙创建及注入依赖对象

两种不同类型容器如下:

  • Spring BeanFactory 容器

    它是最简单的容器,给 DI(依赖注入) 提供了基本的支持,它用 org.springframework.beans.factory.BeanFactory 接口来定义。

  • Spring ApplicationContext 容器

    该容器添加了更多的企业特定的功能,例如从一个属性文件中解析文本信息的能力,发布应用程序事件给感兴趣的事件监听器的能力。该容器是由 org.springframework.context.ApplicationContext 接口定义。

PS:ApplicationContext 容器包括 BeanFactory 容器的所有功能,所以通常ApplicationContext作为Spring容器。BeanFactory 仍然可以用于轻量级的应用程序,如移动设备或基于 applet 的应用程序。

二、AOP (Aspect Oriented Programming),面向切面编程

  • 原理

    通过动态代理的方式为程序添加统一功能,集中解决一些公共问题。

  • 优点

    • 各个步骤之间的良好隔离性使耦合性大大降低;
    • 源代码无关性。扩展功能时不需对源码进行修改操作;
  • 应用场景

    • Authentication 权限
    • Caching 缓存
    • Context passing 内容传递
    • Error handling 错误处理
    • Lazy loading 懒加载
    • Debugging 调试
    • logging 日志
    • tracing 追踪
    • profiling and monitoring 记录跟踪优化
    • Performance optimization 性能优化
    • Persistence 持久化
    • Resource pooling 资源池
    • Synchronization 同步
    • Transactions 事务
  • 核心概念

    • 横切关注点

      对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点

    • 切面(aspect)

      类是对物体特征的抽象,切面就是对横切关注点的抽象

    • 连接点(joinpoint)

      被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器

    • 切入点(pointcut)

      对连接点进行拦截的定义

    • 通知(advice)

      所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类

    • 目标对象

      代理的目标对象

    • 织入(weave)

      将切面应用到目标对象并导致代理对象创建的过程

    • 引入(introduction)

      在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段

  • Spring对AOP的支持

    Spring中AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也由IOC容器负责管理。

    • 默认使用Java动态代理来创建AOP代理;
    • 当需要代理的类不是接口的时候,Spring会切换为使用CGLIB代理;
  • 应用 AOP

    • 定义普通业务组件;

    • 定义切入点,一个切入点可能横切多个业务组件;

    • 定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作;

 posted on 2018-06-20 15:45  AI.℡  阅读(199)  评论(0编辑  收藏  举报