美文网首页
2018-02-01

2018-02-01

作者: 敲代码的小学生 | 来源:发表于2018-02-01 17:50 被阅读0次

    关于String AOP面向切面编程的小测试~

    注:大部分内容来自@郭寻抚的简书

    AOP使用的场景

    AOP用来封装横切关注点,具体可以在下面的场景中使用。

    Authentication 权限

    Caching 缓存

    Context passing 内容传递

    Error handling 错误处理

    Lazy loading 懒加载

    Debugging  调试

    logging,tracing,profiling and monitoring 记录跟踪 优化 校准

    Performance optimization 性能优化

    Persistence  持久化

    Resource pooling 资源池

    Synchronization 同步

    Transactions 事务

     AOP的相关概念

    1. 切面(Aspect):切面是通知和切点的结合。通知和切点共同定义了切面的全部内容———他是什么,在何时和何处完成其功能。

    2. 通知(Advice):在AOP中,切面的工作被称为通知。通知定义了切面“是什么”以及“何时”使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题。Spring切面可以应用5种类型的通知:

    前置通知(Before):在目标方法被调用之前调用通知功能

    后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么

    返回通知(After-returning):在目标方法成功执行之后调用通知

    异常通知(After-throwing):在目标方法抛出异常后调用通知

    环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为

    3. 切点(Pointcut):如果说通知定义了切面“是什么”和“何时”的话,那么切点就定义了“何处”。比如我想把日志引入到某个具体的方法中,这个方法就是所谓的切点。

    4. 连接点(Join Point):程序执行过程中明确的点,如方法的调用或特定的异常被抛出。在Spring AOP中,一个连接点总是表示一个方法的执行。

    5. 引入(Introduction):添加方法或字段到被通知的类。 Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现 IsModified接口,来简化缓存。Spring中要使用Introduction, 可有通过DelegatingIntroductionInterceptor来实现通知,通过DefaultIntroductionAdvisor来配置Advice和代理类要实现的接口。

    6. 织入(Weaving):把切面应用到目标对象来创建新的代理对象的过程添加方法或字段到被通知的类。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring AOP,在运行时完成织入。

    7. 目标对象(Target Object):包含连接点的对象。也被称作被通知或被代理对象。

    8. AOP代理(AOP Proxy):AOP框架创建的对象,包含通知。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理,本文会在下文讲述这两种动态创建代理的方式。

    Controller层代码:

    切面层代码ApiAspect:

    输出结果为:

    个人理解:

    @Around方法环绕通知会在@Before方法前置通知之前先执行一次,然后继续执行@Before通知,方法结束后会立马再执行一次@Around方法环绕,紧接着执行@After方法执行之后的代码,最后执行@AfterReturning通知内的代码。

    相关文章

      网友评论

          本文标题:2018-02-01

          本文链接:https://www.haomeiwen.com/subject/uotjzxtx.html