AOP&OOP的区别
AOP的出现确实解决外围业务代码与核心业务代码分离的问题,但它并不会替代OOP,如果说OOP的出现是把编码问题进行模块化,那么AOP就是把涉及到众多模块的某一类问题进行统一管理
AOP织入方式
- 动态织入:动态织入又分静动两种,静则指织入过程只在第一次调用时执行;动则指根据代码动态运行的中间状态来决定如何操作,每次调用Target的时候都执行;动态织入的方式是在运行时动态将要增强的代码织入到目标类中,这样往往是通过动态代理技术完成的,如Java JDK的动态代理(Proxy,底层通过反射实现)或者CGLIB的动态代理(底层通过继承实现),Spring AOP采用的就是基于运行时增强的代理技术;
- 静态织入:指在编译时期就织入,即:编译出来的class文件,字节码就已经被织入了;AspectJ主要采用的是编译期织入,在这个期间使用AspectJ的ajc编译器(类似javac)把aspect类编译成class字节码后,在java目标类编译时织入,即先编译aspect类再编译目标类

ajc编译器
关于ajc编译器,是一种能够识别aspect语法的编译器,它是采用java语言编写的,由于javac并不能识别aspect语法,便有了ajc编译器,注意ajc编译器也可编译java文件
实现技术
- AspectJ
- Spring Aop
- Jboss Aop
区别
- Spring Aop采用的动态织入,而Aspectj是静态织入
应用场景
- 日志
- 权限控制
- 事务控制