SpringAOP:目标类如何向切面类中传参
来源:互联网 发布:利达消防报警主机编程 编辑:程序博客网 时间:2024/05/19 10:39
如何向一个切面类进行传参?
切面类
package com.xbz.learn.spring.aspect;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;/** * 切面类 * @author xubaozhong * */@Aspectpublic class FirstAspect { @Pointcut("execution (* com.xbz.learn.spring.aspect.FirstAspectTarget.*(..))") public void pointcut(){ } @Before("execution (* com.xbz.learn.spring.aspect.FirstAspectTarget.doService(User))&&args(user)") public void doBefore(User user){ System.out.println(user); System.out.println("doBefore...modify parameter"); user.setUsername("Before"); } @After("execution (* com.xbz.learn.spring.aspect.FirstAspectTarget.doService(User))&&args(user)") public void doAfter(User user){ System.out.println("After-->"+user); System.out.println("doAfter...modify parameter"); user.setUsername("After"); } @AfterReturning("execution (* com.xbz.learn.spring.aspect.FirstAspectTarget.doService(User))&&args(user)") public void doAfterReturning(User user){ System.out.println("AfterReturning-->"+user); System.out.println("AfterReturning...modify parameter"); user.setUsername("AfterReturning"); }}
目标类
package com.xbz.learn.spring.aspect;import org.springframework.stereotype.Component;/** * 切面目标类,被拦截的目标类 * @author xubaozhong * */@Componentpublic class FirstAspectTarget { /*public void doService(){ System.out.println("doService----处理业务逻辑"); throw new RuntimeException(new Exception("业务报错")); }*/ public void doService(User user){ System.out.println(user); }}
JavaConfig
package com.xbz.learn.spring.aspect;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.EnableAspectJAutoProxy;@Configuration//@ComponentScan@EnableAspectJAutoProxypublic class FirstAspecJavaConfig { @Bean public FirstAspect getFirstAspect(){ return new FirstAspect(); } @Bean public FirstAspectTarget getFirstAspectTarget(){ return new FirstAspectTarget(); } }
Test类
package com.xbz.learn.spring.aspect;import org.junit.Test;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={FirstAspecJavaConfig.class})public class FirstAspectTest { @Autowired private FirstAspectTarget target; @Test public void testFirstAspect(){ User user = new User(); user.setUsername(""); target.doService(user); System.out.println("finally-->"+user); }}class User{ @Override public String toString() { return "User [username=" + username + ", password=" + password + "]"; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } private String username; private String password;}
输出结果:User [username=, password=null]doBefore...modify parameterUser [username=Before, password=null]After-->User [username=Before, password=null]doAfter...modify parameterAfterReturning-->User [username=After, password=null]AfterReturning...modify parameterfinally-->User [username=AfterReturning, password=null]
可见Before | After | AfterReturning的顺序。
注意After无论方法是否成功执行,均会调用
0 0
- SpringAOP:目标类如何向切面类中传参
- SpringAOP面向切面
- SpringAop--切面实例
- SpringAop切面的简单使用
- SpringAOP之注入AspectJ切面
- 关于springAOP,面向切面编程
- SpringAOP使用入门,如何对自定义的注解进行切面编程
- SpringAOP面向切面详解(带实例)
- SpringAOP的概念(面向切面)
- 一个目标类对应多个切面的例子
- SpringAOP:为目标类添加新的功能(拓展接口)
- SpringAOP过滤目标方法的简单实现
- springAOP面向切面编程之日志记录功能
- SpringAOP之切点和切面的深入理解
- SpringAOP入门学习一:基于注解配置切面( AspectJ)
- SpringAop 9 (面向切面编程,常用于拦截器)
- 如何向目标IP地址发送数据包…
- AOP和面向切面编程
- 6道题学会JAVA解大数问题
- Linux内核驱动之DDR3
- iOS CoreAnimation动画系列教程(一):CABasicAnimation
- Scala类型系统编程
- Java中使用Jedis操作Redis
- SpringAOP:目标类如何向切面类中传参
- js判断是否安装app,安装打开app
- 尚学堂hadoop大数据培训Hadoop安装配置
- 表(算法分析与设计笔记)
- Java反射机制的原理及在Android下的简单应用
- OC-工厂模式
- 美国专利类型简介
- sphinx的配置文件
- dubbo和zookeeper的使用