切面类:

package com.atChina.Test3;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;/*** @Aspect:来自aspectj框架,表示当前类是切面类* 切面类是用来给业务方法增强功能的类*/
@Aspect
public class MyAspect {/*** @Around:环绕通知,在目标方法前和后都能增强功能*  属性: value,表示切入点表达式(切面功能加入的位置) *  位置:在方法的上面* * 后置通知的特点:*  1.在目标方法前和后都能增强功能*  2.能够修改目标方法的执行结果*  3.能够控制目标方法是否执行*  *  参数 ProceedingJoinPoint 继承自org.aspectj.lang.JoinPoint,表示切入点*  *  返回值: Object,表示目标方法的执行结果*/@Around(value="execution(* *..SomeServiceImpl.doAround(..))")public Object myAround(ProceedingJoinPoint pjp) throws Throwable{Object result=null;System.out.println("环绕通知,在目标方法之前...增强功能");result = pjp.proceed(); // 执行目标方法, 注释该语句后,目标方法就不会被执行,从而控制了目标方法的执行if(null != result){// 修改目标方法的执行结果result = ((String)result).toUpperCase();}System.out.println("环绕通知,在目标方法之后...增强功能");return result;}
}

普通bean

package com.atChina.Test3;public interface SomeService {public void doSome();public String doOther(String params);public Student getStudent();public String doAround();
}package com.atChina.Test3;public class SomeServiceImpl implements SomeService {@Overridepublic void doSome() {System.out.println("执行了doSome业务方法...");}@Overridepublic String doOther(String params) {// TODO Auto-generated method stubSystem.out.println("执行了doSome业务方法..."+params);return params;}@Overridepublic Student getStudent() {Student st = new Student();st.setAge(22);st.setName("孙悟空");return st;}@Overridepublic String doAround() {System.out.println("执行了doAround业务方法...");return "doAround";}
}package com.atChina.Test3;public class Student {private String name;private int age;public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}
}

配置bean以及声明自定代理生成器

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引用Spring的多个Schema空间的格式定义文件 -->
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd "><!-- 声明目标类对象 --><bean id="someService" class="com.atChina.Test3.SomeServiceImpl" /><!-- 声明切面类对象 --><bean id="myAspect" class="com.atChina.Test3.MyAspect" /><!-- 声明自动代理生成器,创建代理对象 --><aop:aspectj-autoproxy /> <!-- 寻找aspectj框架能够识别的标签 -->
</beans>

测试类以及测试结果:

@Testpublic void test1(){String configLocation = "com/atChina/Test3/applicationContext.xml"; // 类路径的根目录ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocation);// 目标对象有接口,aspectj默认使用的是jdk动态代理SomeService proxy = (SomeService) ctx.getBean("someService");System.out.println(proxy.getClass().getName());// proxy.doSome();System.out.println("===================================");String result = proxy.doAround();System.out.println("返回值result:"+result);}测试结果:
com.sun.proxy.$Proxy8
===================================
环绕通知,在目标方法之前...增强功能
执行了doAround业务方法...
环绕通知,在目标方法之后...增强功能
返回值result:DOAROUND

spring22:Aspectj实现环绕通知@Around相关推荐

  1. (Spring笔记)AspectJ环绕通知——@Around切面开发

    目录 一.前言 二.环绕通知切面开发         (1)环绕通知业务接口         (2)环绕通知业务接口实现         (3)环绕通知切面类         (4)applicati ...

  2. Spring的环绕通知

    首先加入jar包: com.springsource.net.sf.cglib -2.2.0.jar com.springsource.org.aopalliance-1.0.0 .jar com.s ...

  3. Spring3.0中的前置通知、后置通知、环绕通知、异常通知

    观众类Audience~~ [java] view plain copy package com.jCuckoo.demo; import org.aspectj.lang.ProceedingJoi ...

  4. 配置切入点表达式|| 前置通知、后置通知、异常通知、最终通知、环绕通知

    环绕通知 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...

  5. spring aop 环绕通知around和其他通知的区别

    前言: spring 的环绕通知和前置通知,后置通知有着很大的区别,主要有两个重要的区别: 1) 目标方法的调用由环绕通知决定,即你可以决定是否调用目标方法,而前置和后置通知   是不能决定的,他们只 ...

  6. Spring Boot AOP面向切面编程使用(定义切入点、前置通知、后置通知、返回通知、异常通知、环绕通知)

    1 AOP AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发 ...

  7. AOP基于注解环绕通知

    核心代码 (前提配置好文件) @Aspect // 1. 让当前类变成切面类 @Component // 2. 让spring接管切面类的创建 public class LogAspect {/*** ...

  8. SpringBoot-AOP环绕通知记录日志/鉴权

    1.问题描述 微信公号h5开发,前后端分离,因为是在微信公号里面操作页面,还有涉及到不同手机操作也不一样,导致联调比较麻烦,定位问题也麻烦,以前写过通过aop记录所有前端http请求,就又拿出来梳理了 ...

  9. spring实现AOP环绕通知方式

    spring实现AOP环绕通知方式 点关注不迷路,欢迎再来! 精简博客内容,尽量已行业术语来分享. 努力做到对每一位认可自己的读者负责. 帮助别人的同时更是丰富自己的良机. 目录 spring实现AO ...

最新文章

  1. python的logging模块
  2. VS2008工具,两种加入库的方法。 设置程序运行时目录
  3. [html] 进入编辑页面时,如何把光标聚焦到第一个input?
  4. 学习笔记4 :opencv 、PIL、matplotlib.image打开、保存图片
  5. 解说linux下proc文件系统
  6. 21天实战人工智能系列:人工智能产品经理最佳实践(2)
  7. css3学习总结9--CSS3过渡
  8. CSI Tool安装使用讲解
  9. ISE14.7从程序设计到下载
  10. HTML5背景颜色表格作业,HTML快速入门5——不规则表格、表格背景、边框颜色
  11. Unity3D学习(规范)
  12. PDF裁剪页面及调整页面大小的方法
  13. 批量ping检测主机状态
  14. qt程序报错error C2248: “ThreadTest::ThreadTest”: 无法访问 private 成员(在“ThreadTest”类中声明)
  15. 云聚高性能,论道“新超算”
  16. 计算机网络实训报告局域网,计算机网络局域网实验报告.doc
  17. Warning: preg_match(): Compilation failed: PCRE does not support
  18. delegate 用法
  19. cesium 使用时间轴显示轮船实时位置轨迹,通过粒子系统添加轮船尾浪效果
  20. 华为无线猫EchoLife HG522路由配置

热门文章

  1. 移动端整屏滑动的实现
  2. android logger的使用
  3. c# list排序的三种实现方式 (转帖)
  4. SilverLight学习笔记--建立Silverlight自定义控件(1)--外观设计
  5. 关于运算符重载的问题
  6. 深入理解模板模式及实际应用
  7. jpgraph 实例文档
  8. 侧记戴尔的第三代虚拟化价值观
  9. 使用 Webix 创建 Email 客户端
  10. U盘为什么还有剩余空间,但却提示说空间不够