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

spring Aop使用示例

简介(aop作用):1.在不改变源代码的基础上进行功能添加,如日志打印、执行时间统计。2.与代理效果类似但更加便捷。

示例:

        maven依赖:

      <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.20</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.7</version></dependency>
<!--        测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>

        dao接口:

public interface UserDao {public void save();
}

        dao实现类:

@Component  //声明为组件
public class UserDaoIim  implements UserDao {@Overridepublic void save() {System.out.println("save");}
}

        spring配置类(@EnableAspectJAutoProxy):

@Configuration //定义为配置类
@ComponentScan("")//包扫描
@EnableAspectJAutoProxy //开启aop
public class SpringConfig {}

        通知类(核心):

@Aspect
@Component
public class MyAop {@Pointcut("execution(void com.dt.dao.UserDao.save())")//单的方法增强// @Pointcut("execution(void com.dt.dao.UserDao.*(参数))")//对所有方法增强,参数没有就不填public void pt(){}@Before("pt()")//对切点pt所代理的方法执行前增强public void  before(){System.out.println("执行前增强");}@After("pt()")//对切点pt所代理的方法执行后增强public void  after(){System.out.println("执行后增强");}@Around("pt()")//对切点pt所代理的方法执行环绕增强public void  around(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("around,执行前增强");joinPoint.proceed();System.out.println("around,执行后增强");}@AfterReturning("pt()")//对切点pt所代理的方法返回后通知public void  fterReturning()  {System.out.println("执行后返回增强");}@AfterThrowing("pt()")//对切点pt所代理的方法报错后通知public void  afterThrowing()  {System.out.println("执行报错后增强");}
}

        测试:

public class MyTest {private UserDao userDao;@Testpublic void springs(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springConfig.xml");userDao = applicationContext.getBean(UserDao.class);userDao.save();}
}

http://www.lryc.cn/news/348654.html

相关文章:

  • MySQL-InnoDB数据存储结构
  • 【吊打面试官系列】Java高并发篇 - 什么是 Java Timer 类?如何创建一个有特定时间间隔的任务?
  • Spring生命周期深度解析
  • 基于 Windows 的记事本简单功能开发及部署发布--迭代2.0
  • Java lambda
  • 【智能算法】河马优化算法(HO)原理及实现
  • spring基础使用(案例)
  • 相同的树LeetCode
  • Vue中如何抽取部分代码到单独的ts文件
  • 山东齐鲁文化名人颜廷利:朱郭有文才,曲高‘菏’寡星光路
  • 嵌入式学习70-复习(wireshark使用和http协议)
  • idea配置MySQL提示
  • 如何利用AI生成答辩PPT?笔灵AI答辩PPT,智能识别关键点
  • 速盾:怎么设置cdn加速小程序图片?
  • Android bootchart 分析启动性能工具使用
  • 一键开启,盲盒小程序里的梦幻奇遇
  • 如何进行并行执行的诊断与调优 —— 《OceanBase 并行执行》系列 6
  • 【Ubuntu系统hgfs共享文件夹不显示问题解决】
  • C++的相关知识集
  • 解决Jmeter报错 :Error generating the report: java.lang.NullPointerException
  • QT外部库:zlib
  • 钡铼技术BL205模块分布式IO集成应用风电场状态监测
  • java博客目录
  • 从零开始学习Linux(8)----自定义shell
  • 《大数据分析-数据仓库项目实战》学习笔记
  • JDK介绍
  • JavaScript 对象入门:基础用法全解析
  • 如何获得一个Oracle 23ai数据库(docker容器)
  • 想跨境出海?云手机提供了一种可能性
  • 制药行业新突破:CANOpen转PROFINET网关配置案例解析