本章接上一章讲,所需jar包和xml的命名引用已经弄好:
https://blog.csdn.net/qq_34598667/article/details/83417459
本章我们讲解xml的方式实现aop


Spring使用AspectJ进行AOP的开发:XML的方式

学习本章需要先知道这些内容:

通知类型

前置通知:在目标方法执行之前执行.
后置通知:在目标方法执行之后执行
环绕通知:在目标方法执行前和执行后执行
异常抛出通知:在目标方法执行出现异常的时候执行
最终通知:无论目标方法是否出现异常最终通知都会执行.

切入点语法表达式

语法:execution(表达式)
表达式语法:[方法访问修饰符] 方法返回值包名.类名.方法名(方法的参数)

  • 例1:
    execution (* com.oak.service.impl.UserServiceImpl.*(…)) :匹配UserServiceImpl类中声明的所有方法。
    第一个 * :代表任意修饰符及任意返回值类型
    第二个 * :代表任意方法,
    … :匹配任意数量任意类型的参数,若目标类与该切面在同一个包中,可以省略包名。

  • 例2:execution public double cn.itcast.service.impl.PersonServiceImpl.*(…):匹配PersonServiceImpl类中返回值类型为double类型的所有公有方法。

下面开始我们的案例:


1)导入jar包和引入xml命名空间

上一章已经写好

2)编写目标类

1)创建接口UserService

public interface UserService {void save(); void update(); void delete(); void find();
}

2)编写实现类

public class UserServiceImpl implements UserService{@Overridepublic void save() {System.out.println("I am the method for save ");}@Overridepublic void update() {System.out.println("I am the method for update ");}@Overridepublic void delete() {System.out.println("I am the method for delete ");}@Overridepublic void find() {System.out.println("I am the method for find ");}
}

3)在xml中配置目标类

<!--配置目标类 -->
<bean id="userService" class="com.oak.service.UserServiceImpl"></bean>

4)编写一个切面类

public class MyAspect {public void doBeforeCheck() {System.out.println("前置通知");}public void doAfterReturning() { System.out.println("后置通知");}public void doAfter() {System.out.println("最终通知");}public void doAfterThrowing() {System.out.println("异常通知");}public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {System.out.println("进入方法");Object result = pjp.proceed();System.out.println("退出方法");return result;}
}

5)在xml配置文件中完成通知(增强)配置

从上可知MyAspect不过就是一个普通的JavaBean。现在要使用Spring配置文件实现AOP,使它变成为一个切面:

<!--配置切面类-->
<bean id="myAspect" class="com.oak.aop.MyAspect"></bean>
<!--进行aop的配置-->
<aop:config> <!--配置切入点表达式:哪些类的哪些方法需要进行增强 这里给UserService的save方法进行增强   --> <aop:pointcut expression="execution(* com.oak.service.UserService.save(..))" id="pointcut1"/> <!--配置切面--> <aop:aspect ref="myAspect"> <!-- 指定before前置通知的方式是切面中的doAccessCheck方法 --><aop:before method="doBeforeCheck" pointcut-ref="pointcut1"/> </aop:aspect>
</aop:config>

6)测试

在com.oak.test中新建SpringAOPTest,新建aopXmlTest为:

@Test
public void aopXmlTest(){ApplicationContext cxt = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService=cxt.getBean("userService",UserService.class);userService.save();
}

控制台结果为:

前置通知
I am the method for save

在执行目标类的save方法前执行了代理了的前置通知。

7)其他通知(增强)的配置

修改xml,给UserService中的所有方法添加通知

<!--进行aop的配置-->
<aop:config> <!--配置切入点表达式:哪些类的哪些方法需要进行增强 这里给UserService的save方法进行增强   --> <aop:pointcut expression="execution(* com.oak.service.UserService.save(..))" id="pointcut1"/><!-- 给所有的方法增强 --><aop:pointcut expression="execution(* com.oak.service.UserService.*(..))" id="pointcut2"/>  <!--配置切面--> <aop:aspect ref="myAspect"> <!-- 指定before前置通知的方式是切面中的doAccessCheck方法 --><aop:before method="doBeforeCheck" pointcut-ref="pointcut1"/><!-- 指定after-returning后置通知的方式是切面中的doAfterReturning方法 --><aop:after-returning method="doAfterReturning" pointcut-ref="pointcut2"/> <!-- 异常通知 --><aop:after-throwing method="doAfterThrowing" pointcut-ref="pointcut2"/> <!-- 最终通知 --><aop:after method="doAfter" pointcut-ref="pointcut2"/>  </aop:aspect>
</aop:config>

修改测试类:

@Test
public void aopXmlTest(){ApplicationContext cxt = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService=cxt.getBean("userService",UserService.class);userService.save();userService.delete();}

控制台结果为:

前置通知
I am the method for save
后置通知
最终通知
I am the method for delete
后置通知
最终通知

Spring使用XML的方式实现AOP的开发——Spring AOP(六)相关推荐

  1. SSM框架笔记06:初探Spring——采用XML配置方式

    初探Spring--采用XML配置方式   Spring框架是一个轻量级的企业级开发的一站式解决方案.所谓解决方案就是可以基于Spring解决Java EE开发的所有问题.Spring框架主要提供了I ...

  2. Spring 基于xml配置方式的AOP

    我们具体用代码来说明: 1.ArithmeticCalculator.java 1 package com.proc; 2 3 public interface ArithmeticCalculato ...

  3. Spring 在 xml配置文件 或 annotation 注解中 运用Spring EL表达式

    Spring  EL 一:在Spring xml 配置文件中运用   Spring EL Spring EL 采用 #{Sp Expression  Language} 即 #{spring表达式} ...

  4. Spring的XML解析原理,java软件开发面试常见问题

    前言 很多同学想进大厂,特别是刚毕业的,以及工作年限短的,不要有任何侥幸心理,踏踏实实的把基础弄扎实了,这是你通往高薪之路的唯一正确姿势. 首先从面试题做起~好了,不多说了,直接上正菜. 在这里分享一 ...

  5. Spring解析 XML 的原理,你搞定了么?

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/l6108003/article/ details/106297618 前言 Spring已经是我们Java Web开发必不可少 ...

  6. Spring的xml文件配置方式实现AOP

    配置文件与注解方式的有很大不同,多了很多配置项. beans2.xml <?xml version="1.0" encoding="UTF-8"?> ...

  7. spring 基于xml方式配置aop

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

  8. 面向切面(AOP)之Spring接口方式 schema配置方式 aspectj注解方式

    一.初识AOP   关于AOP的学习可以参看帮助文档:spring-3.2.0.M2\docs\reference\html目录下index.html的相关章节      1.AOP:Aspect-O ...

  9. Spring的Bean实例化、属性注入、对象注入、复杂注入(基于xml配置方式)

    一.Bean实例化的三种方式: (1)使用类的无参构造创建 (2)使用静态工厂创建 (3)使用实例工厂创建 代码实例: (1)项目结构: (2)在pom.xml中导入spring的核心jar包依赖: ...

  10. Spring AOP源码解析——AOP动态代理原理和实现方式

    2019独角兽企业重金招聘Python工程师标准>>> Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和 ...

最新文章

  1. 系统管理员都要知道的 30 个 Linux 系统监控工具
  2. Android程序ToDoList增加配置项页面
  3. php中怎么让主键自增长,在数据库设计中,无论如何也该设计一个自增ID字段作为主键吗?...
  4. java future用法_纯干货:Java学习过程中的21个知识点和技术点
  5. python中写入csv文件的方法_Python写入CSV文件的方法
  6. Delphi clientdataset的详细介绍
  7. 3、什么是控制反转(IoC),什么是依赖注入
  8. Python headers not found错误解决办法
  9. HIT Software Construction Review Notes(1-2 Quality Objectives of Software Construction)
  10. 前端也能玩转机器学习?Google Brain 工程师来支招!
  11. docker容器的实践——综合项目一
  12. 2020年上海将初步建成“泛在化、融合化、智敏化”智慧城市
  13. 浏览器自动化(python)
  14. 【JavaSE8 高级编程 多线程】多线程入门级解析 2019_7_27
  15. 什么电子邮箱最安全,什么邮箱更具私密性?
  16. LVGL笔记11--lv_btn按钮
  17. onedrive学生账号无法登录win10 OneDrive客户端[账号密码错误]
  18. cmd中回退到上一级文件目录 与 定位下一级目录
  19. H5页面在ios的浏览器上使用 高德地图 报当前定位失败Geolocation permission denied 或者 偶尔报AMap没有找到的
  20. 2020,那些惊艳我的产品迭代

热门文章

  1. 浅谈算法和数据结构: 十二 无向图相关算法基础
  2. 基础集合论 第一章 3 集合论的公式和条件
  3. 每日一题/011/线性代数/高等代数/两个上三角矩阵的乘积还是上三角矩阵
  4. linux重新识别逻辑卷,教你认识LVM逻辑卷
  5. php两个数组递归排序,PHP数组递归排序实现方法示例
  6. KnockOutlook:针对Outlook的红队安全研究工具
  7. java反射 泛型类型_【译】9. Java反射——泛型
  8. memcache、redis
  9. 一些抄来的冷知识...
  10. _itemmod_refresh