Spring AOP 处理通知中的参数【Spring 入门】
2017-03-02 18:43
387 查看
之前一篇博客中写到了Spring AOP创建切面和通知,切面都很简单,没有参数,所通知的方法也没有参数,这里我们将会以一个计数器的例子(用切面记录每个数字被打印的次数),来说明切面如何访问和使用传递给被通知方法的参数。
代码中有详细注释
打印数字类 NumberPrinter.java
用来做计数器的切面 Counter.java
配置类:
测试类:
代码中有详细注释
打印数字类 NumberPrinter.java
package com.aop; import org.springframework.stereotype.Component; @Component public class NumberPrinter { public void printNumber(int number){ System.out.println(number); } }
用来做计数器的切面 Counter.java
package com.aop; import org.aspectj.lang.annotation.*; import java.util.*; @Aspect public class Counter { private Map<Integer, Integer> map = new HashMap<Integer, Integer>(); //指定参数的切点 @Pointcut("execution( * com.aop.NumberPrinter.printNumber(int))" + "&& args(number)") public void numPrinted(int number){}//声明带有参数的切点表达式 @Before("numPrinted(number)")//切点表达式 public void count(int number){//number参数来自切点方法 map.put(number, getCount(number) + 1); } public int getCount(int number){//获得该number被计数的次数 return map.containsKey(number) ? map.get(number) : 0; } }
配置类:
package com.aop; import org.springframework.context.annotation.*; @Configuration @ComponentScan @EnableAspectJAutoProxy//启用AspectJ注解的自动代理 public class Config { @Bean public Counter counter(){ return new Counter(); } }
测试类:
package com.aop; import org.junit.*; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = Config.class) public class CounterTest { @Autowired//从SpringIOC容器中根据类型找到bean并注入 private NumberPrinter numberPrinter; @Autowired private Counter counter; @Test//测试计数器 public void testCounter(){ numberPrinter.printNumber(1); numberPrinter.printNumber(1); numberPrinter.printNumber(2); Assert.assertEquals(counter.getCount(1), 2);//断言测试结果的正确性 Assert.assertEquals(counter.getCount(2), 1); } }
相关文章推荐
- SpringAOP处理通知中的参数
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- 基于xml配置的spring aop 的实现日志 和为通知传递参数
- 0047 Spring的AOP入门基础--切面组件--通知--切入点
- spring-aop中around切面中处理参数
- Spring AOP 之三:通知(Advice)方法参数
- 【Spring实战】—— 10 AOP针对参数的通知
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- Spring Boot入门3——AOP处理请求
- Spring 配置使用 - AOP 通知参数
- Spring AOP那些学术概念—通知、增强处理连接点(JoinPoint)切面(Aspect)
- spring AOP 通知参数的传递
- 使用Spring AOP预处理Controller的参数
- Spring -- AOP入门基础&基于Aspect的AOP通知用法
- spring MVC AOP 拦截方法参数并根据业务逻辑处理参数
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- 【spring】aop切面通知,日志处理
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- 基于spring-aop对springmvc的参数的验证和处理