pring-AOP


/**
     * @ClassName: AopTransation
     * @Description:自定AOP 切面类 日志打印
     * @author dongwei_qi
     * @date 2020年6月10日
     *
     */
@Component
@Aspect// 标识为切面类
public class AopLog {
	
    private static final Logger log = LoggerFactory.getLogger(AopLog.class);

	
	@Pointcut("execution(* com.example.dream.user.controller.*.*(..))")
    public void login(){//切点映射,命名不规定
        System.out.println("aspect");
    }

//	切面类通知分为,前置通知、后置通知、运行通知、异常通知、环绕通知
	
//	前置通知,注解拦截切入点springCloud_Server.com.cloudServer.service
	@Before("login()")
	public void before(JoinPoint joinPoint) {
//		拦截方法前打印日志,访问地址、请求类方法、请求参数
		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
		StringBuffer sb = new StringBuffer();
		sb.append("请求方法:" + request.getMethod());//请求方法
		sb.append("  请求地址:" + request.getRequestURL());//请求地址
		sb.append("  请求类、方法:" + joinPoint.getSignature());//获取请求类方法
		sb.append("  请求方法参数:");
		Object[] args = joinPoint.getArgs();
		for (Object obj : args) {
			sb.append(obj);
		}
		log.info(sb.toString());//请求方法参数
//		System.out.println("前置通知:在方法之前执行。。。");
	}
	
	   /**
     * 返回通知:
     * 1. 在目标方法正常结束之后执行
     * 1. 在返回通知中补充请求日志信息,如返回时间,方法耗时,返回值,并且保存日志信息
     *
     * @param ret
     * @throws Throwable
     */
    @AfterReturning(value = "login()", returning = "ret")
    public void doAfterReturning(Object ret) throws Throwable {
       log.info("请求返回 : {}", ret.toString());
    }
 
    /**
     * 异常通知:
     * 1. 在目标方法非正常结束,发生异常或者抛出异常时执行
     * 1. 在异常通知中设置异常信息,并将其保存
     *
     * @param throwable
     */
    @AfterThrowing(value = "login()",throwing ="throwable")
    public void doAfterThrowing(JoinPoint joinPoint,Throwable throwable) {
    	 Class clazz = joinPoint.getTarget().getClass();
         String targetName = clazz.getSimpleName();
         String methodName = joinPoint.getSignature().getName();
         String logString = "异常退出方法: " + targetName + "." + methodName + ",返回结果是: " + throwable;
         log.error(logString);
    }
	

}


/**
 *功能描述  自定义注解
 * @author dongwei_qi
 * @date 2021年8月26日
 */
@Retention(RetentionPolicy.RUNTIME)//运行期
@Target(ElementType.METHOD)
public @interface AuthAnnotation {

    AuthUser[] value();
}

public enum AuthUser {
    AUTH_USER
}


@Order(1)
@Aspect
public class AuthAop {

    /**
     *功能描述  自定义注解切入点
     * @author dongwei_qi
     * @date 2021年8月26日
     * @param  joinPoint
     */
    @Before("@annotation(com.example.dream.annotation.AuthAnnotation)")
    public void AuthBefor(JoinPoint joinPoint){

    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值