Spring的AOP:参数操作
来源:互联网 发布:天策脸型数据 编辑:程序博客网 时间:2024/06/15 12:35
在最近的研究中关于Spring的AOP:参数操作,用于获取JoinPoint的信息。
Signature getSignature: 返回目标方法的签名
Object getTarget: 返回被织入增强处理的目标对象
获取目标方法的信息
访问目标方法最简单的做法是定义增强处理方法时,将第一个参数定义为JoinPoint类型,JoinPoint是SpringAoP中,只支持Method Execution (方法执行)的Joinpoint,对于类型中的属性,我们可以通过对setter,getter方法的拦截从而达到相同的效果。
JoinPoint里包含了如下几个常用的方法:
Object[] getArgs: 返回目标方法的参数Signature getSignature: 返回目标方法的签名
Object getTarget: 返回被织入增强处理的目标对象
Object getThis: 返回AOP框架为目标对象生成的代理对象
下面的切面类中定义了Before、Around、AfterReturning和After 4中增强处理,并分别在4种增强处理中访问被织入增强处理的目标方法、目标方法的参数和被织入增强处理的目标对象等:
@Aspect@Componentpublic class AdviceArg {// 定义切点表达式@Pointcut("execution(* com.baowei.dao.*.*(..))")public void pointCut_() {}@Around("pointCut_()")public Object process(ProceedingJoinPoint point) throws Throwable {System.out.println("@Around:执行目标方法之前...");// 访问目标方法的参数:Object[] args = point.getArgs();if (args != null && args.length > 0&& args[0].getClass() == String.class) {args[0] = "改变后的参数1";}// 用改变后的参数执行目标方法Object returnValue = point.proceed(args);System.out.println("@Around:执行目标方法之后...");System.out.println("@Around:被织入的目标对象为:" + point.getTarget());return returnValue;}@Before("pointCut_()")public void permissionCheck(JoinPoint point) {System.out.println("@Before:模拟权限检查...");System.out.println("@Before:目标方法为:"+ point.getSignature().getDeclaringTypeName() + ".--"+ point.getSignature().getName());System.out.println("@Before:参数为:" + Arrays.toString(point.getArgs()));System.out.println("@Before:被织入的目标对象为:" + point.getTarget());}@AfterReturning(pointcut = "pointCut_()", returning = "returnValue")public void log(JoinPoint point, Object returnValue) {System.out.println("@AfterReturning:模拟日志记录功能...");System.out.println("@AfterReturning:目标方法为:"+ point.getSignature().getDeclaringTypeName() + "."+ point.getSignature().getName());System.out.println("@AfterReturning:参数为:"+ Arrays.toString(point.getArgs()));System.out.println("@AfterReturning:返回值为:" + returnValue);System.out.println("@AfterReturning:被织入的目标对象为:" + point.getTarget());}@After("pointCut_()")public void releaseResource(JoinPoint point) {System.out.println("@After:模拟释放资源...");System.out.println("@After:目标方法为:"+ point.getSignature().getDeclaringTypeName() + "."+ point.getSignature().getName());System.out.println("@After:参数为:" + Arrays.toString(point.getArgs()));System.out.println("@After:被织入的目标对象为:" + point.getTarget());}}
测试代码:
public class UserTest {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");UserService service = context.getBean(UserService.class);System.out.println(service);User user = service.getUser(1);System.out.println(user);}}下面是执行结果:
@Around:执行目标方法之前...@Before:模拟权限检查...@Before:目标方法为:com.baowei.dao.UserDao.--getUser@Before:参数为:[1]@Before:被织入的目标对象为:com.baowei.dao.UserDao@21ed5459get User ...@Around:执行目标方法之后...@Around:被织入的目标对象为:com.baowei.dao.UserDao@21ed5459@After:模拟释放资源...@After:目标方法为:com.baowei.dao.UserDao.getUser@After:参数为:[1]@After:被织入的目标对象为:com.baowei.dao.UserDao@21ed5459@AfterReturning:模拟日志记录功能...@AfterReturning:目标方法为:com.baowei.dao.UserDao.getUser@AfterReturning:参数为:[1]@AfterReturning:返回值为:User [id=1, name=zhang]@AfterReturning:被织入的目标对象为:com.baowei.dao.UserDao@21ed5459User [id=1, name=zhang]
源码下载地址:
http://download.csdn.net/detail/zbw18297786698/9684416
原博客地址:
http://blog.csdn.net/xvshu/article/details/45112675
1 0
- Spring的AOP:参数操作
- Spring的aop操作
- Spring的aop操作
- java架构解密——Spring框架的AOP:参数操作
- Spring AOP:访问目标方法的参数
- spring AOP 通知参数的传递
- 使用Spring AOP预处理Controller的参数
- Spring AOP注解的方式校验参数
- spring aop参数校验
- Spring AOP 参数说明
- Spring的aspectj的AOP操作
- spring AOP的 操作日志记录功能
- spring的AOP实现记录操作日志
- Spring的AOP实现日志管理操作
- Spring中AOP操作的相关术语
- AOP、Spring的AOP
- spring aop操作
- Spring AOP操作术语
- 文件操作练习
- 使用nodejs下载网站所有图片
- 注解
- Intellij IDEA 将java项目打包成jar
- 集成极光推送的一点说明
- Spring的AOP:参数操作
- bootstrap动态调用select下拉框
- 避免野指针
- xcode创建静态库1
- 集合框架
- git学习-创建仓库克隆仓库
- Eclipse开发快捷键记录
- MFC线程同步—— CCriticalSection类使用
- C++ static的总结