1. Aspect Oriented Programing,
即面向方面(切面)编程。
2. AOP是一种编程思想,是对OOP的补充,
可以进一步提高编程的效率
1. AspectJ
语言级的实现
定义了AOP语法
编译时织入代码,有一个专门的编译器,用来生成遵守Java字节码规范的class文件
2. Spring AOP
java实现
运行时通过代理方式织入代码
只支持方法类型的连接点
spring支持AspectJ的集成
1. 编译时织入,需使用特殊的编译器。
2. 装载时织入,需使用特殊的类装载器。
3. 运行时织入,需为目标生成代理对象。
1. JDK动态代理:用接口代理
Java提供的动态代理技术,可以在运行时创建接口的代理实例。
Spring AOP默认采用此种方式,在接口的代理实例中织入代码。目标组件必须有接口。
2. CGLib动态代理:用子类代理
采用底层的字节码技术,在运行时创建子类代理实例。
当目标对象不存在接口时,Spring AOP会采用此种方式,在子类实例中织入代码。