Introduction是啥?在Spring中如果有一个已经存在的service,我们想对其进行增强,但是又不想改变其代码,这个时候就可以使用Introduction来处理。具体怎么实现,看下面的详细例子。

引入jar包

 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.4.RELEASE</version></dependency><!--spring aop依赖AspectJ--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.2</version></dependency></dependencies>

新建配置类

@Configuration
@ComponentScan("com.xqc")
@EnableAspectJAutoProxy
public class IntroductionConfig {}

新建接口OrderInterface并添加say方法

public interface OrderInterface {void say();
}

实现类

@Service
public class OrderInterfaceImpl implements OrderInterface{@Overridepublic void say() {System.out.println("say...");}
}

新建OrderServiceImpl类,

@Service
public class OrderServiceImpl {}

可以看出该类中没有任何方法,但是我们又想使用say方法。需要添加切面类,然后使用@DeclareParents注解

@Aspect
@Component
public class IntroductionAspect {@DeclareParents(value = "com.xqc.introduction.OrderServiceImpl",defaultImpl = OrderInterfaceImpl.class)private OrderInterface orderInterface;}
value:写需要增强的类,支持表达式
defaultImpl:具体实现增强方法的的类

结果输出


public class TestIntroduction {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(IntroductionConfig.class);OrderInterface orderInterface = (OrderInterface)context.getBean(OrderServiceImpl.class);System.out.println(orderInterface);orderInterface.say();}
}

成功调用OrderInterfaceImpl的say方法

工程结构

Spring AOP中Introduction的使用相关推荐

  1. Spring AOP中定义切点PointCut详解

    1.AOP是什么? 软件工程有一个基本原则叫做"关注点分离"(Concern Separation),通俗的理解就是不同的问题交给不同的部分去解决,每部分专注于解决自己的问题.这年 ...

  2. Spring AOP中是如何注册Advisor的?

    前置博文: Spring AOP中如何为Bean创建代理? Spring AOP中是如何注册Advisor的? Spring AOP如何为目标方法创建拦截器链? Spring AOP拦截器调用的实现 ...

  3. Spring AOP中定义切点(PointCut)和通知(Advice)

    本文讨论一下Spring AOP编程中的两个关键问题,定义切点和定义通知,理解这两个问题能应付大部分AOP场景. 如果你还不熟悉AOP,请先看AOP基本原理,本文的例子也沿用了AOP基本原理中的例子. ...

  4. 正确理解Spring AOP中的Around advice

    Spring AOP中,有Before advice和After advice,这两个advice从字面上就可以很容易理解,但是Around advice就有点麻烦了. 乍一看好像是Before ad ...

  5. Spring : Spring AOP 中的增强(Advice)或者通知

    1.美图 2.概述 概念参考:Spring :Spring AOP 中的一些术语 很多人将增强理解为通知,但是理解为增强会更加准确,因为它表示在连接点上执行的行为,这个行为是目标类类所没有的,是为目标 ...

  6. Spring :Spring AOP 中的一些术语

    1.美图 2.概述 2.1 连接点(Jointpoint) 连接点(Jointpoint):表示需要在程序中插入横切关注点的扩展点,连接点可能是类初始化.方法执行.方法调用.字段调用或处理异常等等,S ...

  7. Spring Aop中解析spel表达式,实现更灵活的功能

    前言 在Spring Aop中,我们可以拿到拦截方法的参数,如果能结合spel表达式,就能实现更加灵活的功能.典型的实现有Spring的缓存注解: @Cacheable(value = "u ...

  8. Spring AOP 中 advice 的四种类型 before after throwing advice around

    Spring  AOP(Aspect-oriented programming) 是用于切面编程,简单的来说:AOP相当于一个拦截器,去拦截一些处理,例如:当一个方法执行的时候,Spring 能够拦截 ...

  9. java @around_正确理解Spring AOP中的Around advice

    Spring AOP中,有Before advice和After advice,这两个advice从字面上就可以很容易理解,但是Around advice就有点麻烦了. 乍一看好像是Before ad ...

  10. Spring AOP 中的切点是什么?如何定义切点?

    Spring AOP 中的切点是什么?如何定义切点? 什么是切点? 在 Spring AOP 中,切点(Pointcut)是指一组连接点(Join Point)的集合.连接点是程序执行过程中的某个特定 ...

最新文章

  1. databtables 设置(显示)行号
  2. chkconfig命令会立即生效吗_UG绘制波纹管,整体变形命令你会用吗?
  3. Ajax 文件上传之PHP心得
  4. Maven学习总结(48)——利用wagon-maven-plugin插件自动化部署Jar包/war包到Linux远程服务器
  5. ASP.NET性能优化之分布式Session
  6. 移动商城第十四篇【收货地址查询、添加、更新】
  7. poj2513 Colored Sticks【欧拉迹+并查集+字典树】
  8. layer子窗口与父窗口传值
  9. jsp购物车(session版)
  10. matlab几何形状面积计算,小学数学几何图形计算公式总结
  11. linux-快速返回上次所在目录
  12. 计算机电子科技生产质量标准,SJT9527-1993微型数字电子计算机质量分等标准.pdf...
  13. html查看今天星期几,jquery怎么获取星期几
  14. 本科生晋升GM记录 Kaggle比赛进阶技巧分享
  15. 阻容感基础05:电容器原理(1)-电容器模型
  16. 能轻松部署的企业即时通讯软件
  17. 超市进销存管理系统软件(JFrame简版)
  18. 微信小程序反编译及源码抓取(2021最新)
  19. 翻译并添加 解析OV13850 datasheet
  20. 五路DI五路DO,网络继电器,Modbus TCP远程IO模块 WJ95

热门文章

  1. Elasticsearch 多字段查询 best_fields、most_fields、cross_fields,傻傻分不清楚?
  2. @Results用法总结
  3. python调整dicom窗宽窗位_【基础篇】kaggle || RSNA脑溢血金牌案例技术分享!如何使用dicom格式的数据的?...
  4. 配置 DNS over HTTPS阻止DNS污染
  5. java对网络图片进行签名
  6. 微信安装旧版本方法,版本过低,请升级最新版本
  7. jquery 漂浮广告
  8. 【Linux】一步一步学Linux系列教程汇总(更新中......)
  9. Android主题色设为透明
  10. linux系统输入法进程怎么关闭,快速解决linux下中文输入法问题