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编程(代码)相关推荐

  1. 使用注解方式进行aop编程(代码)

    UserDao.java接口: package com.liu.jdk;public interface UserDao {public void addUser();public void dele ...

  2. spring 基于xml方式配置aop

    目录 什么是aop 模拟aop 配置 什么是aop 什么是aop 作用 在程序运行期间,在不修改源码的情况下对方法进行功能增强 优势 减少重复代码 提高开发效率 并且便于开发 2.aop关键概念 模拟 ...

  3. spring框架:简述AOP的使用(xml方式和注解方式)

    本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教. AOP概述 AOP的概念: AOP,全称Apect Oriented Programming,译为面向切面编程,简单的说它可以帮我们把程序 ...

  4. 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)

    一看标题肯定会联想到使用动态编织的方式实现AOP编程,不过这不是作者本文讨论的重点. 本文讨论另外三种在netcore中可实现的方式,Filter(过滤器,严格意义上它算是AOP方式),Dynamic ...

  5. spring的AOP配置之XML方式

    AOP概念 ⚫ AOP(Aspect Oriented Programing)面向切面编程,一种编程范式,隶属于软工范畴,指导开发者如 何组织程序结构 ⚫ AOP弥补了OOP的不足,基于OOP基础之上 ...

  6. Spring IoC和DI XML方式 注解方式 依赖注入 AOP面向切面

    初识Spring框架 时代变迁 原始时代我们用一个jsp搞定一切,但如此开发大型项目时我们遇到了问题,前端美化的代码和后端的代码交织,代码中又有html.js.css样式,又有业务逻辑和数据库访问代码 ...

  7. 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入

    概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为" ...

  8. Spring AOP(三)--XML方式实现

    本文介绍通过XML方式实现Spring AOP,在上一篇中已经介绍了通过注解+java配置的方式,这篇文章主要是看XML中怎么配置,直接上代码了: 一.创建一个连接点 1⃣️定义接口 注意⚠️:可以定 ...

  9. Spring基础专题——第六章(Aop编程)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

最新文章

  1. 智能车竞赛创意组别对应的FQA
  2. live的domain服务
  3. MySQL中的二进制类型
  4. Linux下pdf读取乱码
  5. Springbooot集成Shiro简单使用
  6. 建造SAP Fiori部署
  7. 【JavaMail-收取邮件】
  8. 【复习】原生Js实现文件上传
  9. HDU-6470 Count (构造矩阵+矩阵快速幂)
  10. Android官方开发文档Training系列课程中文版:通知用户之更新或移除通知
  11. C#设计模式学习(类型对象模式)
  12. DbUtils组件的使用小指南
  13. Windows下Python安装numpy+mkl,Scipy和statsmodels
  14. [云盘]共享文件列表
  15. Winlogon、LSASS、Userinit
  16. 天津大学学硕和专硕的区别_专硕学硕的区别你弄明白了吗?听听学长学姐怎么说...
  17. 【Linux操作系统】--攥写一个简易的shell工具
  18. 数据库如何备份与恢复
  19. 微信小程序:超强大微信小程序源码下载内含几十款功能王者战力查询,游戏扫码登录,王者巅峰信息查询等等支持流量主收益和CPS收益
  20. Java习题练习:拉马车

热门文章

  1. 杜克大学出来的NBA球星有哪些?
  2. SAP Basis 应该做什么
  3. SAP MPS、MRP名词解释
  4. 杨国福或夺“麻辣烫第一股”,是否名副其实?
  5. 百雀羚、林清轩、逐本走红背后,植物基护肤品的春天来了?
  6. c语言找最长串指针改错,全国计算机二级C语言上机 (改错题)【DOC精选】.doc
  7. tengine简单安装_实操丨如何在EAIDK上部署Tengine开发AI应用之物体检测应用入门(C++)...
  8. winxp批处理重启计算机,WinXP使用关机命令shutdown的方法
  9. c语言改java语言,请教怎么把这个JAVA程序改成C语言能够运行啊
  10. 关于 ESP,EBP,EIP