2018-02-01

关于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通知内的代码。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,082评论 19 139
  • 本章内容: 面向切面编程的基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 ...
    谢随安阅读 3,228评论 0 9
  • 浸透哀痛的纸点燃 飞起灰烬满天 膨胀了心中的哀怨 我不相信 你猝然撒手人寰 我不相信 你的陪伴如此短暂 我不相信 ...
    暗香_e921阅读 294评论 4 9
  • 婚姻不如意,在哀怨中日复一日纠缠,不肯放手,明明过得很痛苦,却总也不尝试改变,明知道自己不幸福,却一再的降低自己的...
    残阳物语阅读 598评论 6 11
  • ssd
    十年生死两茫茫阅读 150评论 0 1