使用XML方式进行AOP编程(代码)
UserDao.java接口:
package com.liu.jdk;public interface UserDao {public void addUser();public void deleteUser();}
UserDaoImpl.java实现类:
package com.liu.jdk;//目标类
public class UserDaoImpl implements UserDao {@Overridepublic void addUser() {// TODO Auto-generated method stubSystem.out.println("添加方法");}@Overridepublic void deleteUser() {// TODO Auto-generated method stubSystem.out.println("删除方法");}}
MyAspect.java切面:
package com.liu.aspect.xml;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;public class MyAspect {//前置通知public void before(JoinPoint joinpoint) {System.out.println("前置通知开始.模拟权限检查");System.out.println("前置通知的目标类为:"+joinpoint.getTarget());System.out.println("增强处理的方法:"+joinpoint.getSignature().getName());}//后置通知public void afterRunning(JoinPoint joinPoint) {System.out.println("后置通知开始,模拟记录日志");System.out.println("处理的目标方法:"+joinPoint.getSignature().getName());}//环绕通知 ProceedingJoinPoint是JoinPoint子接口,表示执行的方法//1.返回值必须是Object//2.必须接收一个参数,类型为ProceedingJoinPoint//3.必须抛出异常public Object around(ProceedingJoinPoint proceedingJoinPoint)throws Throwable {System.out.println("环绕通知,执行目标方法前,模拟开启事务");Object obj = proceedingJoinPoint.proceed();System.out.println("环绕通知,执行目标方法后,模拟关闭事务");return obj;}//异常通知public void afterThrowing(JoinPoint joinPoint,Throwable e) {System.out.println("异常通知,原因在于:"+e.getMessage());}//最终通知public void after() {System.out.println("最终通知:模拟关闭连接");}}
ApplicationContext.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.3.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.3.xsd "><!-- 1 定义目标类 --><bean id = "userDao" class = "com.liu.jdk.UserDaoImpl"></bean><!-- 2 定义切面类 --><bean id = "myAspect" class = "com.liu.aspect.xml.MyAspect"></bean><!-- 3 aop编程 --><aop:config><!-- 配置切面 --><aop:aspect ref = "myAspect"><!-- 配置切入点 通知最后增强哪些方法 --><aop:pointcut expression="execution(* com.liu.jdk.*.*(..))" id="pointCut"/><!-- 关联通知和切入点 --><!-- 前置通知 --><aop:after method="before" pointcut-ref="pointCut"/><!-- 后置通知 在方法返回之后执行 可以获得返回值 returning用于设置后置通知的第二个参数名称 类型是Object--><aop:after-returning method="afterRunning" pointcut-ref="pointCut" returning="returnVal"/><!-- 环绕通知 --><aop:around method="around" pointcut-ref="pointCut"/><!-- 异常通知 用于处理程序发生异常 如果没有异常就不会执行 throwing属性用于设置第二个参数的名称 类型是Throwable--><aop:after-throwing method="afterThrowing" pointcut-ref="pointCut" throwing="e"/><!-- 最终通知 不管程序发生什么事情 总会执行--><aop:after method="after" pointcut-ref="pointCut"/></aop:aspect></aop:config>
</beans>
Test.java测试类:
package com.liu.aspect.xml;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.liu.jdk.UserDao;public class Test {public static void main(String[] args) {String xmlpath = "com/liu/aspect/xml/ApplicationContext.xml";ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlpath);UserDao userDao = (UserDao) applicationContext.getBean("userDao");userDao.addUser();}}
运行结果:
环绕通知,执行目标方法前,模拟开启事务
添加方法
前置通知开始.模拟权限检查
前置通知的目标类为:com.liu.jdk.UserDaoImpl@53ca01a2
增强处理的方法:addUser
后置通知开始,模拟记录日志
处理的目标方法:addUser
环绕通知,执行目标方法后,模拟关闭事务
最终通知:模拟关闭连接
需要的包:
使用XML方式进行AOP编程(代码)相关推荐
- 使用注解方式进行aop编程(代码)
UserDao.java接口: package com.liu.jdk;public interface UserDao {public void addUser();public void dele ...
- spring 基于xml方式配置aop
目录 什么是aop 模拟aop 配置 什么是aop 什么是aop 作用 在程序运行期间,在不修改源码的情况下对方法进行功能增强 优势 减少重复代码 提高开发效率 并且便于开发 2.aop关键概念 模拟 ...
- spring框架:简述AOP的使用(xml方式和注解方式)
本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教. AOP概述 AOP的概念: AOP,全称Apect Oriented Programming,译为面向切面编程,简单的说它可以帮我们把程序 ...
- 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)
一看标题肯定会联想到使用动态编织的方式实现AOP编程,不过这不是作者本文讨论的重点. 本文讨论另外三种在netcore中可实现的方式,Filter(过滤器,严格意义上它算是AOP方式),Dynamic ...
- spring的AOP配置之XML方式
AOP概念 ⚫ AOP(Aspect Oriented Programing)面向切面编程,一种编程范式,隶属于软工范畴,指导开发者如 何组织程序结构 ⚫ AOP弥补了OOP的不足,基于OOP基础之上 ...
- Spring IoC和DI XML方式 注解方式 依赖注入 AOP面向切面
初识Spring框架 时代变迁 原始时代我们用一个jsp搞定一切,但如此开发大型项目时我们遇到了问题,前端美化的代码和后端的代码交织,代码中又有html.js.css样式,又有业务逻辑和数据库访问代码 ...
- 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入
概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为" ...
- Spring AOP(三)--XML方式实现
本文介绍通过XML方式实现Spring AOP,在上一篇中已经介绍了通过注解+java配置的方式,这篇文章主要是看XML中怎么配置,直接上代码了: 一.创建一个连接点 1⃣️定义接口 注意⚠️:可以定 ...
- Spring基础专题——第六章(Aop编程)
前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...
最新文章
- 智能车竞赛创意组别对应的FQA
- live的domain服务
- MySQL中的二进制类型
- Linux下pdf读取乱码
- Springbooot集成Shiro简单使用
- 建造SAP Fiori部署
- 【JavaMail-收取邮件】
- 【复习】原生Js实现文件上传
- HDU-6470 Count (构造矩阵+矩阵快速幂)
- Android官方开发文档Training系列课程中文版:通知用户之更新或移除通知
- C#设计模式学习(类型对象模式)
- DbUtils组件的使用小指南
- Windows下Python安装numpy+mkl,Scipy和statsmodels
- [云盘]共享文件列表
- Winlogon、LSASS、Userinit
- 天津大学学硕和专硕的区别_专硕学硕的区别你弄明白了吗?听听学长学姐怎么说...
- 【Linux操作系统】--攥写一个简易的shell工具
- 数据库如何备份与恢复
- 微信小程序:超强大微信小程序源码下载内含几十款功能王者战力查询,游戏扫码登录,王者巅峰信息查询等等支持流量主收益和CPS收益
- Java习题练习:拉马车
热门文章
- 杜克大学出来的NBA球星有哪些?
- SAP Basis 应该做什么
- SAP MPS、MRP名词解释
- 杨国福或夺“麻辣烫第一股”,是否名副其实?
- 百雀羚、林清轩、逐本走红背后,植物基护肤品的春天来了?
- c语言找最长串指针改错,全国计算机二级C语言上机 (改错题)【DOC精选】.doc
- tengine简单安装_实操丨如何在EAIDK上部署Tengine开发AI应用之物体检测应用入门(C++)...
- winxp批处理重启计算机,WinXP使用关机命令shutdown的方法
- c语言改java语言,请教怎么把这个JAVA程序改成C语言能够运行啊
- 关于 ESP,EBP,EIP