zoukankan      html  css  js  c++  java
  • Spring IoC 与 AOP

    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框架为普通业务组件织入的处理动作;

  • 相关阅读:
    MSDN Magazine搞错了
    Visual Studio 2005中设置调试符号(Debug Symbols)
    BCB 6的问题
    吴裕雄天生自然Spring Boot使用Spring Data JPA实现人与身份证的一对一关系映射
    吴裕雄天生自然Spring BootSpring Data JPA
    吴裕雄天生自然Spring BootSpring Boot对JSP的支持
    吴裕雄天生自然Spring BootSpring Boot的异常统一处理
    吴裕雄天生自然Spring Boot使用Spring Data JPA实现Author与Article的一对多关系映射
    吴裕雄天生自然Spring Boot解决 Error creating bean with name 'entityManagerFactory' defined in class path resource
    吴裕雄天生自然Spring Boot@ExceptionHandler注解和@ControllerAdvice注解
  • 原文地址:https://www.cnblogs.com/wscy/p/9204160.html
Copyright © 2011-2022 走看看