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是静态织入

应用场景

  • 日志
  • 权限控制
  • 事务控制

results matching ""

    No results matching ""