1.AOP的原理以及应用场景
面向切面编程,不修改原有代码逻辑的情况下进行逻辑增强。
使用场景:短信业务,restful返回统一响应体等等。
===============================================================
2.AOP的实现有两种,你是用的哪一种,这两种区别是什么?
1》AspectJ 实现的静态代理。
编译时就生成了AOP代理类,将新增代码和原有代码生成新的代理类
2》SpringAop实现的动态代理
不会去修改字节码,而是在内存中生成AOP对象,这个对象包含了目标对象的全部方法,并且在特定的切点做了增强处理
2.1》JDK动态代理
通过反射来接收被代理的类,并要求必须实现一个接口
2.2》CGLIB动态代理
采用CGLIB动态代理,通过继承来实现原有类的子类,所以如果原有类是final修饰的,就不能采用这种代理。
拓展:区别
1》AspectJ静态代理,性能更好,但是需要特定的编译器进行处理
2》SpringAOP只是借用了AspectJ的注解功能
===============================================================
3.AOP的相关注解,表达式都有哪些?
注解:@AspectJ、@Pointcut、@Before、@After、@AfterReturning、@AfterThrowing、@Around
表达式:executio() within() this() bean()