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

Spring框架——AOP注解方式

目录

Spring框架的AOP技术(注解方式)

通知类型


Spring框架的AOP技术(注解方式)

1. 步骤一:创建JavaWEB项目,引入具体的开发的jar包* 先引入Spring框架开发的基本开发包com.springsource.org.apache.commons.logging-1.1.1.jarcom.springsource.org.apache.log4j-1.2.15.jarspring-beans-5.0.2.RELEASE.jarspring-context-5.0.2.RELEASE.jarspring-core-5.0.2.RELEASE.jarspring-expression-5.0.2.RELEASE.jar* 再引入Spring框架的AOP的开发包* spring的传统AOP的开发的包* spring-aop-5.0.2.RELEASE.jar* com.springsource.org.aopalliance-1.0.0.jar* aspectJ的开发包* com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar* spring-aspects-5.0.2.RELEASE.jar*如果是Maven项目,就引入下面的jar包坐标即可<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.7</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.2.RELEASE</version></dependency>
2. 步骤二:创建Spring的配置文件,引入具体的AOP的schema约束<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"></beans>
​
​
3. 步骤三:创建包结构,编写具体的接口和实现类* org.westos.demo1* CustomerDao           -- 接口* CustomerDaoImpl       -- 实现类
​
4. 步骤四:将目标类配置到Spring中<bean id="customerDao" class="org.westos.demo1.CustomerDaoImpl"/>
​
5. 步骤五:定义切面类* 添加切面和通知的注解* @Aspect -- 定义切面类的注解* 通知类型(注解的参数是切入点的表达式)* @Before           -- 前置通知* @AfterReturing        -- 后置通知* @Around           -- 环绕通知* @After            -- 最终通知* @AfterThrowing        -- 异常抛出通知* 具体的代码如下@Aspectpublic class MyAspectAnno {@Before(value="execution(public void org.westos.demo1.CustomerDaoImpl.save())")public void log(){System.out.println("记录日志...");}}
​
6. 步骤六:在配置文件中定义切面类<bean id="myAspectAnno" class="org.westos.demo1.MyAspectAnno"/>
​
7. 步骤七:在配置文件中开启自动代理<aop:aspectj-autoproxy/> 放在最前面
​
8. 完成测试@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class Demo1 {@Resource(name="customerDao")private CustomerDao customerDao;@Testpublic void run1(){customerDao.save();customerDao.update();}}

通知类型

1. 通知类型* @Before           -- 前置通知* @AfterReturing    -- 后置通知* @Around           -- 环绕通知(目标对象方法默认不执行的,需要手动执行)* @After            -- 最终通知* @AfterThrowing    -- 异常抛出通知
​
2. 配置通用的切入点* 使用@Pointcut定义通用的切入点@Aspectpublic class MyAspectAnno {//随便定义一个方法,上面用注解定义一个切入点@Pointcut(value="execution(public void org.westos.demo1.CustomerDaoImpl.save())")public void fn(){}//引用这个定义的切入点 格式:切面类名.方法名@Before(value="MyAspectAnno.fn()")public void log(){System.out.println("记录日志...");}

        /*** 环绕通知*/@Around(value="MyAspectAnno.fn()")public void around(ProceedingJoinPoint joinPoint){System.out.println("环绕通知1...");try {// 让目标对象的方法执行joinPoint.proceed();} catch (Throwable e) {e.printStackTrace();}System.out.println("环绕通知2...");}}

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

相关文章:

  • Java 日志(Logging)如何创建和捕获日志消息和文件
  • em3288 linux_4.19 lvds+tp调试
  • Linux 之 systemctl
  • 【技巧】通过 CMD 走代理下载 Vue
  • VSCode C/C++多文件编译配置
  • Autosar通信入门系列05-聊聊一帧Can/CanFD报文发送时间?
  • 【phaser微信抖音小游戏开发002】hello world!
  • 2023.07.29 驱动开发DAY6
  • 网工必须掌握的5种组网技术,你会了吗?
  • webpack中文文档
  • 【Linux指令篇】--- Linux常用指令汇总(克服指令繁杂问题)
  • 硬盘的分类
  • el-upload批量手动上传,并用form表单校验上传文件
  • 牛客网Verilog刷题——VL52
  • 4-7月预测价差方向准确率统计
  • 《Vue3+Typescript》一个简单的日历组件实现
  • 第一章 修学旅行
  • 如果你也能认识并使用这个低代码平台,那真的是泰酷辣——iVX低代码平台
  • uC-OS2 V2.93 STM32L476 移植:系统移植篇
  • gitee修改代码提交操作步骤说明
  • 物联网|可变参数的使用技巧|不一样的点灯实验|访问外设的寄存器|操作寄存器实现点灯|硬件编程的基本流程-学习笔记(11)
  • 30. 利用linprog 解决 生产决策问题(matlab程序)
  • 一百三十九、Kettle——Linux安装Kettle8.2
  • react路由在layout中的监听
  • Java反射(三)
  • ansible-playbook roles编写lnmp剧本
  • 相机可用性变化监听AvailabilityCallback流程分析
  • 使用Python多线程实现生产者消费者模型
  • Notepad++工具通过正则表达式批量替换内容
  • 从零构建深度学习推理框架-3 手写算子relu