(本文中如有不当之处,恳请批评指正)

AspectJ方式的简化了通知的出现复杂度。但是对配置文件的操作复杂度有了一定的提升

一. 配置通知

  1. package com.xkx.adviceDemo;
  2.  
  3. import org.aspectj.lang.ProceedingJoinPoint;
  4.  
  5. public class TotalAdvice {
  6.  
  7. public void myBefore(){
  8. System.out.println("aspectj方式:物资准备,人员准备,武器准备");
  9. }
  10.  
  11. public void myAfter(){
  12. System.out.println("aspectj方式:人员解救成功");
  13. }
  14.  
  15. public void myError(){
  16. System.out.println("解救出现意外情况,任务执行失败");
  17. }
  18.  
  19. public void myArround(ProceedingJoinPoint p){
  20. System.out.println("环绕通知:开始解救,准备物资,准备弹药");
  21. try {
  22. //放行,执行切点方法
  23. Object result=p.proceed();
  24. } catch (Throwable throwable) {
  25. throwable.printStackTrace();
  26. }
  27. System.out.println("环绕通知:任务执行成功,人质顺利解救");
  28.  
  29. }
  30.  
  31. public void myBeforeHasParameter(String name1,int age1){
  32. System.out.println("aspectj方式:"+name1+" "+age1+"物资准备,人员准备,武器准备");
  33. }
  34.  
  35. }
  1. myBeforeHasParameter是一个带有参数的前置通知,其方法参数名要与配置文件中的对应方法完全一致

二.切点所在类的配置

  1. package com.xkx.pojo;
  2.  
  3. public class People {
  4. private int age;
  5. private String name;
  6. private String sexual;
  7.  
  8. public int getAge() {
  9. return age;
  10. }
  11.  
  12. public void setAge(int age) {
  13. this.age = age;
  14. }
  15.  
  16. public String getName() {
  17. return name;
  18. }
  19.  
  20. public void setName(String name) {
  21. this.name = name;
  22. }
  23.  
  24. public String getSexual() {
  25. return sexual;
  26. }
  27.  
  28. public void setSexual(String sexual) {
  29. this.sexual = sexual;
  30. }
  31.  
  32. @Override
  33. public String toString() {
  34. return this.getAge()+"--"+this.getName()+"--"+this.getSexual();
  35. }
  36.  
  37. public People() {
  38. }
  39.  
  40. public People(int age, String name, String sexual) {
  41. this.age = age;
  42. this.name = name;
  43. this.sexual = sexual;
  44.  
  45. }
  46. public void crraped(){
  47. System.out.println(this.getName()+"已被绑架");
  48. }
  49.  
  50. public void show(){
  51. System.out.println("切点执行:解救"+this.getName()+"任务");
  52. }
  53.  
  54. public void show2(String name1,int age1){
  55. System.out.println("切点执行:解救"+name1+"-->"+age1+"任务");
  56. }
  57.  
  58. public void covert(){
  59. System.out.println("解救成功,召开新闻发布会");
  60. }
  61.  
  62. }

三. 配置Spring的配置文件:applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:aop="http://www.springframework.org/schema/aop"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/aop
  8. http://www.springframework.org/schema/aop/spring-aop.xsd">
  9.  
  10. <bean id="people2" class="com.xkx.pojo.People"></bean>
  11. <bean id="myAdvice" class="com.xkx.adviceDemo.TotalAdvice"></bean>
  12.  
  13. <aop:config>
  14. <aop:aspect ref="myAdvice">
  15. <aop:pointcut id="mypeople3" expression="execution(* com.xkx.pojo.People.show2(String,int )) and args(name1,age1)"></aop:pointcut>
  16. <aop:before method="myBefore" pointcut-ref="mypeople3" ></aop:before>
  17. <aop:before method="myBeforeHasParameter" pointcut-ref="mypeople3" arg-names="name1,age1"></aop:before>
  18. <aop:after method="myAfter" pointcut-ref="mypeople3"></aop:after>
  19. <aop:after-throwing method="myError" pointcut-ref="mypeople3"></aop:after-throwing>
  20. <aop:after-returning method="myAfter" pointcut-ref="mypeople3"></aop:after-returning>
  21. <aop:around method="myArround" pointcut-ref="mypeople3" ></aop:around>
  22. </aop:aspect>
  23. </aop:config>
  24. </beans>

注意:args()中的参数名可以随意取,没有限制,但是一旦取好后,标红的通知的arg-names的参数就要与前面命名的完全一致,而通知方法的方法参数也要完全同配置文件中的通知参数名完全一致

最后的测试就不贴代码了。

Spring中关于AOP的实践之AspectJ方式实现通知的更多相关文章

  1. Spring中关于AOP的实践之Scheme方式实现通知

    (刚开始写东西,不足之处还请批评指正) 关于AOP的通知编写方式有两种,使用Schema-baesd或者使用AspectJ方式,本篇主要介绍Schema-baesd方式的代码实现. (注:代码中没有添 ...

  2. Spring中关于AOP的实践之概念

    一.什么是AOP AOP:也称作面向切面编程 在分享几个概念执行我想先举个栗子(可能例子举得并不是特别恰当): 1.假如路人A走在大街上,被一群坏人绑架了: 2.警察叔叔接到报警迅速展开行动:收集情报 ...

  3. (五)Spring 中的 aop

    目录 文章目录 AOP概念 AOP原理 AOP术语 **`Spring`** 中的 **`aop`** 的操作 使用 `AspectJ` 实现 `aop` 的两种方式 AOP概念 浅理解 aop :面 ...

  4. Spring 中基于 AOP 的 @AspectJ

    Spring 中基于 AOP 的 @AspectJ @AspectJ 作为通过 Java 5 注释注释的普通的 Java 类,它指的是声明 aspects 的一种风格. 通过在你的基于架构的 XML ...

  5. Spring中的AOP

    什么是AOP? (以下内容来自百度百科) 面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种 ...

  6. Spring中的AOP 专题

    Caused by: java.lang.IllegalArgumentException: ProceedingJoinPoint is only supported for around advi ...

  7. AOP 环绕通知 (Schema-base方式) 和 AspectJ方式在通知中获取切点的参数

    环绕通知(Schema- base方式) 1.把前置通知和后置通知都写到一个通知中,组成了环绕通知 2.实现步骤: 2.1 新建一个类实现 MethodInterceptor 接口 public cl ...

  8. spring中的AOP 以及各种通知 配置

    理解了前面动态代理对象的原理之后,其实还是有很多不足之处,因为如果在项目中有20多个类,每个类有100多个方法都需要判断是不是要开事务,那么方法调用那里会相当麻烦. spring中的AOP很好地解决了 ...

  9. Spring学习笔记(四)—— Spring中的AOP

    一.AOP概述 AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.O ...

随机推荐

  1. koa+mysql+vue+socket.io全栈开发之web api篇

    目标是建立一个 web QQ的项目,使用的技术栈如下: 后端是基于koa2 的 web api 服务层,提供curd操作的http接口,登录验证使用的是 json web token,跨域方案使用的是 ...

  2. sun.misc.Unsafe 详解

    原文地址 译者:许巧辉 校对:梁海舰 Java是一门安全的编程语言,防止程序员犯很多愚蠢的错误,它们大部分是基于内存管理的.但是,有一种方式可以有意的执行一些不安全.容易犯错的操作,那就是使用Unsa ...

  3. pyspark列合并为一行

    将 dataframe 利用 pyspark 列合并为一行,类似于 sql 的 GROUP_CONCAT 函数.例如如下 dataframe : +----+---+ | s| d| +----+-- ...

  4. 虚拟机设置静态IP配置

    网关 虚拟机的ip设置  vi /etc/sysconfig/network-scripts/ifcfg-eth0 重启网卡 service network restart 测试 ping www.b ...

  5. Java面试前需要了解的东西

    一.前言 只有光头才能变强 回顾前面: 广州三本找Java实习经历 上一篇写了自己面试的经历和一些在面试的时候遇到的题目(笔试题和面试题). 我在面试前针对Java基础也花了不少的时间,期间也将自己写 ...

  6. java基础(八)-----深入解析java四种访问权限

    Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用.下面整理一下,在什么情况下,有哪些访问权限可以允许选择. 一.访问权限简介 访问权限控制: 指的是本类 ...

  7. Java笔记(day12)

    包: 对类文件进行分类管理:给类提供多层命名(名称)空间:写在程序文件的第一行:类名的全称是 包名.类名包也是一种封装形式: package protected必须是成为其子类,才能继承import导 ...

  8. 关于ASL(平均查找长度)的简单总结

    ASL(Average Search Length),即平均查找长度,在查找运算中,由于所费时间在关键字的比较上,所以把平均需要和待查找值比较的关键字次数成为平均查找长度. 它的定义是这样的: 其中n ...

  9. jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码

    需求: 抽奖代码最多可以抽奖5次,而且,每次只会中“2000元理财金”或者“谢谢参与”,其它的不会抽中(哈哈,果然都是套路). 效果如下: 一.页面结构: ? 1 2 3 4 5 6 7 8 9 10 ...

  10. Android 插件化技术窥探

    在Android 插件化技术中(宿主app和插件app设置相同的sharedUserId),动态加载apk有两种方式: 一种是将资源主题包的apk安装到手机上再读取apk内的资源,这种方式的原理是将宿 ...