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>

猜你喜欢

转载自blog.csdn.net/LiDouDou1994/article/details/81367337