@AfterReturning配置
来源:互联网 发布:在淘宝怎么货到付款啊 编辑:程序博客网 时间:2024/06/10 15:15
AfterReturning和before,after,around不同是可以获取织入函数的返回值,配置复杂一点。
如果切入点如下:
package com.leanyu.lcsystem.pointcut;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;/** * @author pandlvs *描述:切入点定义 */@Aspectpublic class PointcutsDefinition { public static final String ASPECT_SERVICE_EXCUTION = "execution(* com.leanyu.lcsystem.service.*.*(..))"; /** * 服务层的切入点 */ @Pointcut(ASPECT_SERVICE_EXCUTION) public void inServiceLayer(){}}
则around和AfterReturning的配置区别如下,注意AfterReturning配置必须有argNames参数,且参数值和returning值一样,这样在织入代码里面便可通过returning的值获取被织入函数的返回值。
package com.leanyu.lcsystem.permission.impl;import org.apache.log4j.Logger;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.Signature;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.springframework.beans.factory.annotation.Autowired;import com.leanyu.lcsystem.beans.UserBean;import com.leanyu.lcsystem.permission.ICheckPermission;import com.leanyu.lcsystem.service.log.SyslogService;import com.leanyu.rpc.request.AbstractRequest;import com.leanyu.rpc.response.ObjectResponse;import com.leanyu.rpc.response.RpcResponse;/** * @author pandlvs * * 使用@Aspect 注解的类, Spring 将会把它当作一个特殊的Bean(一个切面),也就是 * 不对这个类本身进行动态代理 */ @Aspectpublic class PermissionInterceptor {private Logger logger = Logger.getLogger(PermissionInterceptor.class);@Autowiredprivate ICheckPermission checkPermission;@Autowiredprivate SyslogService syslogService;/** * spring中Around通知 * @param joinPoint * @return * @throws Throwable */@Around("com.leanyu.lcsystem.pointcut.PointcutsDefinition.inServiceLayer()") public Object checkPermissionAround( ProceedingJoinPoint joinPoint ) {try{ Object[] args = joinPoint.getArgs(); AbstractRequest request = (AbstractRequest)args[0]; int userId = request.getUserId(); String password = request.getPassword(); Signature signature = joinPoint.getSignature(); String service = signature.getDeclaringTypeName(); String method = signature.getName(); if ( checkPermission.hasServicePermission(userId, service , method , password) ) { Object result = joinPoint.proceed( args ); return result; } }catch(Throwable e) { logger.error(e.toString(), e); } return null;}/** * AfterReturning 三个参数必须有 * @param joinPoint * @param retVal */@SuppressWarnings("unchecked")@AfterReturning(value = "com.leanyu.lcsystem.pointcut.PointcutsDefinition.inServiceLayer()",argNames = "retVal",returning = "retVal")public void logInfo(JoinPoint joinPoint,Object retVal){Object[] object = joinPoint.getArgs();if(object.length>1) return;int userId;if("logout".equals(joinPoint.getSignature().getName()) || "login".equals(joinPoint.getSignature().getName())){if(((ObjectResponse<UserBean>)retVal).getErrorCode()!=0) return;userId = ((ObjectResponse<UserBean>)retVal).getData().getUserId();}else{if("query".equals(joinPoint.getSignature().getName().substring(0, 5))) return;if(((RpcResponse)retVal).getErrorCode()!=0) return;userId = ((AbstractRequest)object[0]).getUserId();}String action = joinPoint.getSignature().getName();String service = joinPoint.getSignature().getDeclaringTypeName();syslogService.addSyslog(userId, action, service);} }
0 0
- @AfterReturning配置
- @AfterReturning配置
- @AfterReturning配置
- @AfterReturning
- @AfterReturning 返回空
- Spring AOP - AspectJ - @AfterReturning example
- 基于Annotation的Spring AOP: @AfterReturning
- 3.spring的aop之@AfterReturning
- Spring AOP(二)之AfterReturning增强处理
- AOP编程@Pointcut、@AfterReturning、@before、@after、@around
- [Spring AOP] 基于AspectJ的@AfterReturning注释示例=
- [Spring AOP] 基于AspectJ的@AfterReturning注释示例
- 配置
- 配置
- 配置
- 配置
- [配置]
- 配置
- ios利用Reachability确认网络环境3G/WIFI
- 新发现:恶意软件限制安全软件服务特权
- Light OJ 1105
- JDBC连接mysql
- ios网络学习------11 原生API文件上传之断点续传思路
- @AfterReturning配置
- sqlite树型结构查询
- CruiseControl+SVN+Maven+Tomcat6持续集成搭建问题总结
- Java 泛型
- 如果大学他,用心里呵
- 盘位Swif示数我也缴
- 啊是打工斯蒂芬嘎斯旳
- linux open
- 菏泽不孕不育医院哪家好