Spring的AOP编程(自定义注解的编写与使用)

1、编写一个注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LoggerManage {
    //表示的是定义了一个变量  这个变量的类型是 String 默认是空
    public String logDescription() default "";
}

2、编写切面类

@Aspect
@Component
public class LoggerAdvice {
    private Logger logger = Logger.getLogger(this.getClass());
    //这句话表示的意思是:所有方法如果具有@LoggingManager注解的都会被选中
    @Before("@annotation(loggerManage)")
    public void addBeforeLogger(JoinPoint joinPoint, LoggerManage loggerManage) {
    	
    	System.out.println("我执行了哈....");
    	
        LocalDateTime now = LocalDateTime.now();

//        logger.info(now.toString()+"执行[" + loggerManage.logDescription() + "]开始");
          System.out.println(now.toString()+"执行[" + loggerManage.logDescription() + "]开始");
//        logger.info(joinPoint.getSignature().toString());
//
//        logger.info(parseParames(joinPoint.getArgs()));

    }

    @AfterReturning("@annotation(loggerManage)")
    public void addAfterReturningLogger(JoinPoint joinPoint, LoggerManage loggerManage) {
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now.toString()+"执行 [" + loggerManage.logDescription() + "] 结束");
    }

    @AfterThrowing(pointcut = "@annotation(loggerManage)", throwing = "ex")
    public void addAfterThrowingLogger(JoinPoint joinPoint, LoggerManage loggerManage, Exception ex) {
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now.toString()+"执行 [" + loggerManage.logDescription() + "] 异常");
    }

    private String parseParames(Object[] parames) {

        if (null == parames || parames.length <= 0) {
            return "";

        }
        StringBuffer param = new StringBuffer("传入参数 # 个:[ ");
        int i =0;
        for (Object obj : parames) {
            i++;
            if (i==1){
                param.append(obj.toString());
                continue;
            }
            param.append(" ,").append(obj.toString());
        }
        return param.append(" ]").toString().replace("#",String.valueOf(i));
    }


}

3、在controller中使用

@LoggerManage(logDescription="执行了添加部门")
	public String addDept(Dept dept){
}

4、在SpringMVC中配置AOP的自动代理

 <!--配置个AOP的自动代理-->
	<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

5、在SpringMVC中开启注解扫描

<!-- 开启注解扫描   记住这个包扫描的是Controll  一般情况下不要随便去越界-->
	<context:component-scan base-package="com.qf.hospital.controll"></context:component-scan>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值