# Spring AOP

面向切面编程,基于动态代理。

在目标对象的某些方法上添加不同的类型的操作,然后通过某些方法实现一个新的代理目标对象

实现方式:

  1. JDK动态代理,必须实现接口
  2. CGLib动态代理,生成被代理对象的子类
  3. AspectJ

实现方案:

  1. 静态代理:编译期生成AOP代理类
    • 编译时编织,特殊编译器
    • 类加载时编织,特殊的类加载器
  2. 动态代理:运行时在内存中动态生成AOP代理类
    • JDK动态代理:通过拦截器+反射实现,只能代理实现了接口的类
    • CGLIB:基于ASM实现,性能较高,对于指定的类生成子类来实现

核心概念:

  1. JointPoint:连接点,字段或方法上
  2. Advice:通知,在连接点上的具体操作,前置、后置、异常、最终、环绕五种情况
  3. 目标对象:被增强对象
  4. AOP代理:框架创建的代理对象
  5. Weaving:织入,将增加处理逻辑添加到目标对象中,创建一个被增强对象的过程

使用场景:

  • 日志
  • 性能监控
  • 权限控制
  • 事务管理
  • 缓存优化

# Bean的作用域

  1. singleton:唯一
    • 多个线程操作同一个对象,对于对象的非静态成员亦是的写存在多线程问题
  2. prototype:每次创建新的
  3. request:每次request请求创建一个新的,在request内有效
  4. session:每次request请求创建一个新的,在session内有效
  5. global- session:全局session作用域

# Bean的生命周期

  • Bean:init-method,destroy-method
  • Bean级生命周期接口:BeanNameAware、BeanFactoryAware、ApplicationContextAware;InitializingBean、DiposableBean这些接口方法,可被PostConstruct和PreDestroy注解代替
  • 容器线生命周期接口:
上次更新: : 5 months ago