# Spring AOP
面向切面编程,基于动态代理。
在目标对象的某些方法上添加不同的类型的操作,然后通过某些方法实现一个新的代理目标对象
实现方式:
- JDK动态代理,必须实现接口
- CGLib动态代理,生成被代理对象的子类
- AspectJ
实现方案:
- 静态代理:编译期生成AOP代理类
- 编译时编织,特殊编译器
- 类加载时编织,特殊的类加载器
- 动态代理:运行时在内存中动态生成AOP代理类
- JDK动态代理:通过拦截器+反射实现,只能代理实现了接口的类
- CGLIB:基于ASM实现,性能较高,对于指定的类生成子类来实现
核心概念:
- JointPoint:连接点,字段或方法上
- Advice:通知,在连接点上的具体操作,前置、后置、异常、最终、环绕五种情况
- 目标对象:被增强对象
- AOP代理:框架创建的代理对象
- Weaving:织入,将增加处理逻辑添加到目标对象中,创建一个被增强对象的过程
使用场景:
- 日志
- 性能监控
- 权限控制
- 事务管理
- 缓存优化
# Bean的作用域
- singleton:唯一
- 多个线程操作同一个对象,对于对象的非静态成员亦是的写存在多线程问题
- prototype:每次创建新的
- request:每次request请求创建一个新的,在request内有效
- session:每次request请求创建一个新的,在session内有效
- global- session:全局session作用域
# Bean的生命周期
- Bean:init-method,destroy-method
- Bean级生命周期接口:BeanNameAware、BeanFactoryAware、ApplicationContextAware;InitializingBean、DiposableBean这些接口方法,可被PostConstruct和PreDestroy注解代替
- 容器线生命周期接口: