课程信息
- 学习课程:Java工程师2022版
- 章节名称:Spring AOP面向切面编程-基于注解开发Spring AOP
- 讲师:悟空
课程内容
基于注解开发Spring AOP
<!-- 初始化IOC容器 -->
<context:component-scan base-package="com.imooc"/>
<!-- 启用Spring AOP注解模式 -->
<aop:aspect-autoproxy />
给切面添加注解:
@Component注解:标记当前类为组件
@Aspect注解:说明当前类是切面类
@Around(“execution()")环绕通知注解,参数为pointcut切点表达式
Spring AOP底层实现原理(重点)
Spring基于设计模式中的代理模式实现功能动态扩展,包含两种形式:
目标类拥有接口,通过JDK动态代理实现功能扩展
目标类没有接口,通过CGLib组件实现功能扩展
代理模式:
代理模式通过代理对象对原对象实现功能扩展
代理模式:类比回顾——租房,租户、中介、房东、二房东,接口、嵌套
静态代理——必须手动创建代理类的代理模式使用方式
动态代理(自动):在JDK1.2以后,由于反射机制的引入,为我们自动创建代理模式提供了可能
创建代理类:代理类持有委托类的对象属性,实例化时通过构造方法给委托类赋值,就相当于持有委托类对象了)
动态代理必须实现接口才可以运行
在invoke方法对目标方法进行增强
CGLib实现代理类
CGLIb是运行时字节码增强技术
Spring AOP扩展无接口类用CGLib
AOP会运行时生成目标继承类字节码的方式进行行为扩展
学习收获
学习了基于注解开发Spring AOP,Spring AOP的静态代理和动态代理模式