spring含参数 环绕通知demo

题目:有一个懂得读心术的人需要完成两件事情:截听志愿者的内心感应和显示他们在想什么

 1 <?xml version="1.0" encoding="UTF-8"?>
 2
 3 <beans xmlns="http://www.springframework.org/schema/beans"
 4         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5         xmlns:aop="http://www.springframework.org/schema/aop"
 6         xmlns:tx="http://www.springframework.org/schema/tx"
 7         xmlns:p="http://www.springframework.org/schema/p"
 8         xsi:schemaLocation="
 9             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
10             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
11             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
12
13
14     <bean id="magician" class="imple.Magician"/>
15
16     <aop:config>
17         <aop:aspect ref="magician">
18             <aop:pointcut expression="execution(* inter.Thinker.thinkOfSomething(String)) and args(thoughts)" id="thingking" />
19             <aop:before method="interceptThoughts" pointcut-ref="thingking" arg-names="thoughts"/>
20         </aop:aspect>
21     </aop:config>
26 </beans>

读心术:

1 package inter;
2
3 public interface MindReader {
4
5     void interceptThoughts(String thoughts);
6
7     String getThoughts();
8
9 }
 1 package imple;
 2
 3 import inter.MindReader;
 4
 5 public class Magician implements MindReader{
 6
 7     private String thoughts;
 8
 9     public void interceptThoughts(String thoughts) {
10
11         System.out.println("前置Intercepting volunter‘s thoughts");
12         this.thoughts = thoughts;
13         System.out.println(thoughts);
14         System.out.println("后置");
15     }
16
17     public String getThoughts() {
18         return thoughts;
19     }
20
21 }

志愿者:

1 package inter;
2
3 public interface Thinker {
4     void thinkOfSomething(String thoughts);
5 }
 1 package imple;
 2
 3 import inter.Thinker;
 4
 5 public class Volunteer implements Thinker{
 6
 7     private String thoughts;
 8
 9     public void thinkOfSomething(String thoughts) {
10         this.thoughts = thoughts;
11     }
12
13     public String getThoughts(){
14         return thoughts;
15     }
16 }

测试代码:

1     @Test
2     public void test7(){
3         Magician magician = (Magician) ctx.getBean("magician");
4         magician.interceptThoughts("ssss");
5     }

运行结果:

前置Intercepting volunter‘s thoughts
ssss
后置
时间: 2024-10-06 05:21:46

spring含参数 环绕通知demo的相关文章

sprint.net(2) AOP面向切面编程,spring.net的环绕通知;Spring.net的AOP通知的四种类型

AOP 有点类似于我们MVC里面的Filter过滤器,例如在MVC里面,如果给一个Action上打一个标签,就可以在这个Action执行之前或者之后,额外的执行一个方法,这个就相当于是面向切面编程. 无侵入式的. (也就是在不改变原来的代码的情况下,来跳转到一个其他的方法,执行完毕后回到主方法..),但是spring.net的AOP更牛叉,只需要在xml里面配置,就可以了,不需要在方法上面打特性的标签,也不需要继承什么类(例如MVC的过滤器是继承了ActionFilterAttribute) 主

spring aop环绕通知记录应用的日志

使用的框架是spring mvc+spring 最近想利用spring aop的环绕通知来处理web的日志问题,总的来讲,如果在controller层做切入,则难监控实际运行情况,在service层做切入,则只能监控到service层的情况,通过捕捉service抛出的异常来记录日志,对于目前本人应用而言,已经足够了,先将记录如下: 代码: @Component @Aspect public class ExceptionLog { /** * 61 * 环绕通知需要携带ProceedingJo

spring框架应用系列四:切面编程(环绕通知与前后置通知区别)

本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7867034.html 解决问题 1.拥有前置通知和后置通知的功能,并能解决前置通知和后置通知在共享信息方面的不足(例如:统计切点方法执行时间): 2.在多线程并发条件下,能保证线程安全(因为在一个方法内定义的局部变量): 3.解决代码重复性,降低代码复杂程度: 内容说明 1.以下会给出前置通知.后置通知与环绕通知实例(观众观看表演),通过对比更能理解彼此之间的区别

java中AOP的环绕通知

pom.xml <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> </dependency> <!--解析切入点表达式--> <dependency>

[原创]java WEB学习笔记106:Spring学习---AOP的通知 :前置通知,后置通知,返回通知,异常通知,环绕通知

1.通知分类: @Before: 前置通知, 在方法执行之前执行 @After: 后置通知, 在方法执行之后执行 @AfterRunning: 返回通知, 在方法返回结果之后执行 @AfterThrowing: 异常通知, 在方法抛出异常之后 @Around: 环绕通知, 围绕着方法执行 关于方法签名 看第五点 2.前置通知 3.后置通知:在后置通知中,不能访问目标方法执行的结果          4.返回通知               5.异常通知 6.环绕通知 1 package com.

spring的几个通知(前置、后置、环绕、异常、最终)

1.没有异常的 2.有异常的 1.被代理类接口Person.java 1 package com.xiaostudy; 2 3 /** 4 * @desc 被代理类接口 5 * 6 * @author xiaostudy 7 * 8 */ 9 public interface Person { 10 11 public void add(); 12 public void update(); 13 public void delete(); 14 } 2.被代理类PersonImple.java

spring学习 注解AOP 通知传递参数

我们在对切点进行增强时,不建议对切点进行任何修改,因此不加以使用@PointCut注解打在切点上,尽量只在Advice上打注解(Before,After等),如果要在通知中接受切点的参数,可以使用JoinPoint或者ProceedingJoinPoint 在Spring AOP中可以通过两种方式传递参数给Advice(通知) (1)通过接受JoinPoint(非环绕通知)或ProceedingJoinPoint(环绕通知)参数,其实ProceedingJoinPoint是JointPoint的

Spring的环绕通知

首先加入jar包: com.springsource.net.sf.cglib -2.2.0.jar com.springsource.org.aopalliance-1.0.0 .jar com.springsource.org.aspectj.weaver-1.6.8 .RELEASE.jar commons-logging-1.1.3. jar spring-aop-4.0.0.RELEASE.jar spring-aspects-4.0.0.RELEASE.jar spring-bean

【Spring实战】—— 9 AOP环绕通知

假如有这么一个场景,需要统计某个方法执行的时间,如何做呢? 典型的会想到在方法执行前记录时间,方法执行后再次记录,得出运行的时间. 如果采用Spring的AOP,仅仅使用前置和后置方法是无法做到的,因为他们无法共享变量.这样通过环绕通知,就可以快捷的实现. 首先在切面通知类中声明环绕通知类: public void watchPerformance(ProceedingJoinPoint joinpoint){ try{ System.out.println("begin!"); lo