【面试 AOP】【第八篇】AOP的问题

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()

原文地址:https://www.cnblogs.com/sxdcgaq8080/p/8549747.html