当前位置: 首页 > news >正文

Advisor与@Aspect

  • @Aspect 是定义切面的方式(“怎么写”),它是一个使用注解的、声明式的、高可读性的编程模型。
  • Advisor 是 Spring AOP 框架中切面的底层模型(“是什么”),它是一个将单个通知(Advice)和切入点(Pointcut)组合在一起的原子单元。

       其中advisor是一种比较低级的切面,@Aspect是一种高级切面,最后@Aspect的执行都会被转化为多个advisor低级切面。

       下面将要展示两种切面的使用方式。

Aspect切面

static class Target1{public void foo(){System.out.println("target1 foo");}}static class Target2{public void bar(){System.out.println("target2 bar");}}@Aspectstatic class Aspect1{@Before("execution(* foo())")public void beforeFoo(){System.out.println("before foo");}@Before("execution(* bar())")public void beforeBar(){System.out.println("before bar");}}

       aspectJ切面基于注解实现,可以前置后置以及环绕通知都有对应的注解,这是现在比较常见的使用方式。

Advisor切面

@Configurationstatic class Config{@Bean//低级切面public Advisor advisor3(MethodInterceptor advice3){AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();pointcut.setExpression("execution(* foo())");return new DefaultPointcutAdvisor(pointcut, advice3);}@Beanpublic MethodInterceptor advice3(){return invocation -> {System.out.println("advice3 before");Object proceed = invocation.proceed();System.out.println("advice3 after");return proceed;};}}

         advisor切面需要使用pointcut切点以及advice通知来创建,是一种比较低级的切面,使用起来比较麻烦。

 总体代码:

public class a19 {public static void main(String[] args) {GenericApplicationContext context = new GenericApplicationContext();context.registerBean("aspect1", Aspect1.class);context.registerBean("config", Config.class);context.registerBean(ConfigurationClassPostProcessor.class);context.refresh();for(String name : context.getBeanDefinitionNames()){System.out.println(name);}}static class Target1{public void foo(){System.out.println("target1 foo");}}static class Target2{public void bar(){System.out.println("target2 bar");}}@Aspectstatic class Aspect1{@Before("execution(* foo())")public void beforeFoo(){System.out.println("before foo");}@Before("execution(* bar())")public void beforeBar(){System.out.println("before bar");}}@Configurationstatic class Config{@Bean//低级切面public Advisor advisor3(MethodInterceptor advice3){AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();pointcut.setExpression("execution(* foo())");return new DefaultPointcutAdvisor(pointcut, advice3);}@Beanpublic MethodInterceptor advice3(){return invocation -> {System.out.println("advice3 before");Object proceed = invocation.proceed();System.out.println("advice3 after");return proceed;};}}
}

         

http://www.dtcms.com/a/593146.html

相关文章:

  • Java基础——集合进阶6
  • 网站建设湛江分类信息网站如何做排名
  • 二十七、通信接口
  • 个人网站备案条件个人怎么做网页
  • SQL 相关子查询:性能杀手及其优化方法
  • 一文掌握UI自动化测试
  • 金融保险银行营销AI数字化转型培训讲师培训老师唐兴通讲金融银保团队险年金险市场销售
  • 质效飞跃,优测金融数智质效解决方案全新升级!
  • 智网案例精选|光联云网融合智驱,重塑金融数字化转型新格局
  • 自适应网站建设极速建站WordPress更新emoji
  • watch监视-ref对象类型数据
  • 网站建设的英语怎么做淘宝客网站做淘客
  • MBSE:数字模型重塑系统工程未来
  • 排序算法的相关讨论
  • HDFS 之 CacheAdmin
  • MySQL数据库07:分组查询与分类查询
  • 淄博网站公司高端网站建设公司怎么做推广
  • MCU的I/O防护
  • 碳纤维便携式气象站:轻量化设计,随时随地掌握气象数据
  • 华为-AI智算网络学习-2
  • K8S RD: Kubernetes从核心调度到故障排查、网络优化与日志收集指南
  • Java 项目里的那些坑
  • 【读书笔记】NVIDIA DGX
  • 岑溪网站开发工作室宁波网站制作公司费用价格
  • 揭阳智能模板建站海口百度seo公司
  • 智能SQL优化工具 PawSQL 月度更新 | 2025年10月
  • 烟台市网站建设用电脑怎么做原创视频网站
  • Total PDF Converter v6.5.0.356.0 电脑PDF多功能转换器
  • 【Android】MVVM实战:仿Launcher加载与应用过滤
  • seowhy什么意思丹阳seo公司