概念
使用场景
日志记录,性能统计,安全控制,权限管理,事务处理,异常处理,资源池管理
通知(Advice)包含了需要用于多个应用对象的横切行为,抽取出来的通用方法。
连接点(Join Point)是程序执行过程中能够应用通知的所有点,方法前、方法后、环绕方法、抛出异常...。
切点(Poincut)是定义了在“什么地方”进行切入,哪些连接点会得到通知。显然,切点一定是连接点。
切面(Aspect)是通知和切点的结合。通知和切点共同定义了切面的全部内容——是什么,何时,何地完成功能。
引入(Introduction)允许我们向现有的类中添加新方法或者属性。
织入(Weaving)是把切面应用到目标对象并创建新的代理对象的过程,分为编译期织入、类加载期织入和运行期织入。
连接点可以有很多,但是切点只有一个
通知类型
前置通知@Before
:在目标方法调用之前调用通知
后置通知@After
:在目标方法完成之后调用通知
环绕通知@Around
:在被通知的方法调用之前和调用之后执行自定义的方法
返回通知@AfterReturning
:在目标方法成功执行之后调用通知
异常通知@AfterThrowing
:在目标方法抛出异常之后调用通知
Spring AOP与Aspect
Spring AOP和AspectJ没半毛钱的关系,前者是JDK动态代理,用到了CGLIB(Code Generation Library),CGLIB是一个代码生成类库,可以在运行时候动态是生成某个类的子类。代理模式为要访问的目标对象提供了一种途径,当访问对象时,它引入了一个间接的层。后者是静态代理,在编译阶段就已经编译到字节码文件中。
标签:调用,连接点,Spring,AOP,切点,通知,方法 来源: https://www.cnblogs.com/imhui/p/15434067.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。