Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spring-AOP 引介切面

Spring-AOP 引介切面

作者头像
小小工匠
发布于 2021-08-16 08:46:11
发布于 2021-08-16 08:46:11
21300
代码可运行
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构
运行总次数:0
代码可运行

概述

之前的博文介绍了 Spring-AOP 通过配置文件实现 引介增强 ,引介切面是引介增强的封装器,通过引介切面可以很容易的为现有对象添加任何接口的实现。

引介切面类继承关系

IntroductionAdvisor 和 PointcutAdvisor不同,IntroductionAdvisor 仅有一个类过滤器ClassFilter而没有MethodMatcher,因为引介切面是类级别的,而Poincut的切点是方法级别的。

IntroductionAdvisor接口的两个实现类

  • DefaultIntroductionAdvisor 引介切面最常用的实现类
  • DeclareParentsAdvisor 用于实现使用AspectJ语言的DeclareParent注解表示的引介切面。

DefaultIntroductionAdvisor的构造函数

  • public DefaultIntroductionAdvisor(Advice advice) 通过一个增强创建的引介切面,引介切面将为目标对象增强对象中所有接口的实现
  • public DefaultIntroductionAdvisor(Advice advice, IntroductionInfo introductionInfo) 通过一个增强和一个IntroductionInfo创建引介切面,目标对象小实现哪些接口由introduction对象的getInterfaces()方法标识
  • public DefaultIntroductionAdvisor(DynamicIntroductionAdvice advice, Class intf) 通过一个IE增强和一个指定的接口类创建引介切面,仅为目标对象新增intf接口的实现

实例

代码已托管到Github—> https://github.com/yangshangwei/SpringMaster

其余代码同 Spring-AOP 通过配置文件实现 引介增强

我们通过DefaultIntroductionAdvisor配置引介切面,更加简洁、清晰

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    
    <bean id="forumServiceTarget" class="com.xgj.aop.spring.advisor.introductionAdvisor.ForumService" />


    
    <bean id="introductionAdvisor" class="org.springframework.aop.support.DefaultIntroductionAdvisor">
        <constructor-arg>
            <bean class="com.xgj.aop.spring.advisor.introductionAdvisor.ControllablePerformaceMonitor"/>
        constructor-arg>
    bean>

    
    <bean id="forumService" class="org.springframework.aop.framework.ProxyFactoryBean"
        p:interceptorNames="introductionAdvisor"
        p:target-ref="forumServiceTarget" 
        p:proxyTargetClass="true" />

beans>

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2017-08-20 19:02:30,492  INFO [main] (AbstractApplicationContext.java:583) - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5f0101fb: startup date [Sun Aug 20 19:02:30 BOT 2017]; root of context hierarchy
2017-08-20 19:02:30,598  INFO [main] (XmlBeanDefinitionReader.java:317) - Loading XML bean definitions from class path resource [com/xgj/aop/spring/advisor/introductionAdvisor/conf-introductionAdvisor.xml]
模拟删除Forum记录:10
模拟删除Topic记录:1022
begin monitor...
模拟删除Forum记录:10
end monitor...
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.removeForum花费7421毫秒。
begin monitor...
模拟删除Topic记录:1022
end monitor...
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.removeTopic花费12468毫秒。

虽然引介切面和其他切面的配置有很大的不同,但却可以采用相似的Spring配置方式配置引介切面。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/08/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【小家Spring】Spring AOP之Advisor、PointcutAdvisor、IntroductionAdvisor、IntroductionInterceptor(引介增强)
上篇文章:【小家Spring】Spring AOP核心类Pointcut解析,对PointcutExpression切点表达式解析原理分析(以AspectJExpressionPointcut为例) 讲到了很多的Pointcut,以及各自的使用场景。
YourBatman
2019/09/03
5.8K0
【小家Spring】Spring AOP之Advisor、PointcutAdvisor、IntroductionAdvisor、IntroductionInterceptor(引介增强)
Spring-AOP 基于Schema配置切面
如果项目不能使用Java5.0, 那么就无法使用基于@AspectJ注解的切面。 但是Spring提供了基于Schema配置的方法,它完全可以替代基于@AspectJ注解声明切面的方式。
小小工匠
2021/08/17
8900
​[Spring] Spring AOP 实现原理剖析(三)
经过前文的介绍,我们可以看到AOP的增强可以针对一个类的所有方法进行增强(异常增强除外),那么,如何控制在类的指定方法进行增强?这便是接下来 AOP 的切点和切面的作用。
架构探险之道
2019/12/17
5470
​[Spring] Spring AOP 实现原理剖析(三)
Spring-AOP 自动创建代理之AnnotationAwareAspectJAutoProxyCreator
Spring-AOP 自动创建代理之BeanNameAutoProxyCreator
小小工匠
2021/08/16
2290
[Spring] Spring AOP 实现原理剖析(二)
前四种比较好理解,大致对应于被增强方法的执行时间,前、后、前后、异常抛出四个连接点。最后一种引介增强:IntroductionInterceptor 表示在目标类中添加一些新的方法和属性。
架构探险之道
2019/12/17
4380
[Spring] Spring AOP 实现原理剖析(二)
Spring-AOP 静态普通方法名匹配切面
StaticMethodMatcherPointcutAdvisor代表一个静态方法匹配切面,它通过StaticMethodMatcherPointcut来定义切点,并通过类过滤和方法名来匹配所定义的切点.
小小工匠
2021/08/16
7610
Spring-AOP @AspectJ语法基础
@AspectJ使用Java5.0注解和正规的AspectJ的切点表达式语言描述切面, 由于Spring只支持方法的连接点,所以Spring仅支持部分AspectJ的切点语言。
小小工匠
2021/08/16
4060
Spring-AOP 通过配置文件实现 引介增强
引介增强是一种比较特殊的增强类型,它不是在目标方法周围织入增强,而是为目标创建新的方法和属性,所以它的连接点是类级别的而非方法级别的。
小小工匠
2021/08/16
2410
Spring-AOP 流程切面
Spring的流程切面由DefaultPointcutAdvisor和ControlFlowPointcut实现。 流程切点代表由某个方法直接或者间接发起调用的其他方法。
小小工匠
2021/08/16
2820
Spring-AOP 混合使用各种切面类型及不同切面总结
此外,值得注意的是一些切面只能使用基于API的Advisor方式进行构建,如基于ControlFlowPointcut的流程切面。
小小工匠
2021/08/17
2660
Spring-AOP 动态切面
低版本中,Spring提供了用于创建动态切面的DynamicMethodMatcherPointcutAdvisor抽象类,这个抽象类在2.0已过时,现在可以使用DefaultPointcutAdvisor和DynamicMethodMatcherPointcut来完成相同的功能。
小小工匠
2021/08/16
1.1K0
Spring-AOP 复合切点切面
通过上面几篇文章我们发现,实例中的定义的切面仅有一个切点,有的时候,一个切点可能难以描述目标连接点的信息。
小小工匠
2021/08/16
3300
spring 学习(三):aop 学习
3 aop底层使用动态代理实现 (1)第一种情况,有接口情况,使用动态代理创建接口实现类代理对象 (2)第二种情况,没有接口情况,使用动态代理创建类的子类代理对象
希希里之海
2018/08/30
5050
spring 学习(三):aop 学习
Spring-AOP 静态正则表达式方法匹配切面
在Spring-AOP 静态普通方法名匹配切面案例中 StaticMethodMatcherPointcutAdvisor中,仅能通过方法名定义切点,这种描述方式不够灵活,假设目标类中有多个方法,切满足一定的命名规范,使用正则表达式进行匹配就灵活多了。
小小工匠
2021/08/16
4720
Spring-AOP @AspectJ切点函数之@within()和@target
除了@annotation和@args外,还有另外两个用于注解的切点函数,分别是@target和@within.
小小工匠
2021/08/17
2.1K0
Spring-AOP @AspectJ进阶之绑定类注解对象
@within()和@target()函数可以将目标类的注解对象绑定到增强方法中。
小小工匠
2021/08/17
3150
Spring-AOP @AspectJ切点函数之execution()
切点表达式中的方法入参部分比较复杂,可以使用*和..通配符。 其中 *表示任意参数类型的参数, 而..表示任意类型的参数且参数个数不限。
小小工匠
2021/08/16
7390
Spring-AOP @AspectJ进阶之命名切点
切点直接声明在增强方法处,这种切点声明方式称为匿名切点,匿名切点只能在声明处使用。
小小工匠
2021/08/17
2240
Spring-AOP 通过配置文件实现 异常抛出增强
异常抛出增强表示在目标方法抛出异常后实施增强,最适合的场景是事务管理,比如当参与事事务的方法抛出异常后需要回滚事务。
小小工匠
2021/08/16
2950
Spring-AOP 切点/切面类型和创建切面
如果我们希望有选择的织入目标类的某些特定方法中呢? ——–这个时候就需要使用切点进行目标连接点的定位。
小小工匠
2021/08/16
1.1K0
相关推荐
【小家Spring】Spring AOP之Advisor、PointcutAdvisor、IntroductionAdvisor、IntroductionInterceptor(引介增强)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验