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

Spring Aop实现

           spring通过切点的方式可以实现对目标方法实现aop增强,下面是实现aop的四大步骤。

1.准备好切点

AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();pointcut.setExpression("execution(* foo())");

2.准备通知

MethodInterceptor advice = invocation -> {System.out.println("before...");Object proceed = invocation.proceed();System.out.println("after...");return proceed;};

3.准备切面

DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor(pointcut,advice);

4.创建代理

Target target = new Target();ProxyFactory proxyFactory = new ProxyFactory();proxyFactory.setTarget(target);proxyFactory.addAdvisor(advisor);I1 proxy = (I1) proxyFactory.getProxy();System.out.println(proxy.getClass());proxy.foo();System.out.println("___________");proxy.bar();

5.总体实现

package com.example.springdemo.demos.a29;import org.aopalliance.intercept.MethodInterceptor;
import org.springframework.aop.aspectj.AspectJExpressionPointcut;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.support.DefaultPointcutAdvisor;/*** @author zhou* @version 1.0* @description TODO* @date 2025/11/6 22:21*/
public class A29 {public static void main(String[] args) {//1.准备好切点AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();pointcut.setExpression("execution(* foo())");//2.准备通知MethodInterceptor advice = invocation -> {System.out.println("before...");Object proceed = invocation.proceed();System.out.println("after...");return proceed;};//3.准备切面DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor(pointcut,advice);//4.创建代理Target target = new Target();ProxyFactory proxyFactory = new ProxyFactory();proxyFactory.setTarget(target);proxyFactory.addAdvisor(advisor);I1 proxy = (I1) proxyFactory.getProxy();System.out.println(proxy.getClass());proxy.foo();System.out.println("___________");proxy.bar();}interface I1{void foo();void bar();}static class Target implements I1{@Overridepublic void foo() {System.out.println("Target foo");}@Overridepublic void bar() {System.out.println("Target Bar");}}
}

结果:

        从输出结果可以看到,foo方法匹配了切点表达式并且进行了增强,从打印的代理类对象可以看出,通过代理工厂创建的代理是cglib代理。

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

相关文章:

  • 在 VSCode 中:修改快捷键
  • 网站推广软件免费下载安装wordpress这个博客
  • React 18.x 学习计划 - 第七天:React性能优化
  • 网站建设费是几个点的税远程访问群晖wordpress
  • 2.9 超参数自动调优(Optuna / Hyperopt)
  • 【大模型训练】 roll 权重更新 过程
  • QAbstractListModel 详细解析
  • 2025自动化运维厂商选型指南:数字化转型下,自动化运维平台为何成为“必选项”?
  • 如何把宏观战略转化为可执行的产品计划
  • 店铺设计素材针对网站做搜索引擎做优化
  • 温州网站排名优化公司哪家好网站推广服务合同模板
  • vscode-python学习-启动
  • STM32 串口线A-B
  • 使用 dnsmasq 搭建本地 DNS 服务器完整指南
  • 水墨画风格网站wordpress大气摄影主题
  • 详细介绍一下“集中同步+分布式入库”方案的具体实现步骤
  • 网站建设需要上传数据库吗双创网站建设
  • 轻量级Kafka集群管理工具
  • 嵌入式计算架构变革:ARM 浪潮下的替代革命与杰和科技产品布局
  • HarmonyOs鸿蒙开发,日期滑动选择器
  • 鸿蒙ArkUI布局与样式进阶(十六)——页面级变量、函数注入与 @BuilderParam 插槽机制全解析(附详细注释)
  • 网站加载页面怎么做seo网站设计外包
  • sqlserver2019中,一列为计算项目,一列为计算公式及计算项目代表的数字,如何找出一个计算项目是数字改变时,会有多个涉及的计算项目
  • 网站截图可以做证据吗微信小程序模板免费下载
  • 手机兼容测试服务提供商对比分析:腾讯优测Utest的优势与挑战
  • repo xml语法
  • 如何选择能够高效运行的云手机
  • IFC转换为3DXML的技术指南在线转换推荐
  • 站长之家工具网页界面设计的内容五大设计要素
  • MAUI劝退:内部消息机制(社区工具包)