Java基于自定义注解的面向切面的实现

在面向切面编程时,当需要在任何需要切入的地方实现切面编程时,可以用基于自定义注解的方式实现切面编程,即在需要切入的地方加上自定义注解就可以了。

@Aspect注解需要引入aspectjrt.jaraspectjweaver.jar包。

1、在pom.xml中引入aspectjrt和aspectjweaver的依赖。

2、自定义注解类

import java.lang.annotation.*;

/**
 * @author
 * @version 1.0
 * description: 自定义注解
 * date: 2018-07-05 14:30
 */
@Target({ElementType.METHOD}) //注解可以写在方法上
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation {
    String value() default "";

}

3、切面类

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * @author
 * @version 1.0
 * description: 自定义切面类
 * date: 2018-07-05 14:31
 */
@Slf4j
@Aspect
@Component
public class MyAspect {
    //定义切点
    @Pointcut("@annotation(com.zxy.aop.customannotation.MyAnnotation)")
    public void doAspect() {
    }

    @Before("doAspect()")
    public void doBefore(JoinPoint joinPoint) {
        System.out.println("ssssssdddd");
        log.info("Before......");
    }

    @After(value="@annotation(myAnnotation)")
    public void doAfter(JoinPoint joinPoint, MyAnnotation myAnnotation) {
        log.info("After......");
    }

//    @Around("doAspect()")
//    public void doAround(JoinPoint joinPoint) {
//        log.info("Around......");
//    }

    @AfterReturning("doAspect()")
    public void doAfterReturning(JoinPoint joinPoint) {
        log.info("AfterReturning......");
    }

    @AfterThrowing("doAspect()")
    public void ddd() {
        log.info("AfterThrowing......");
    }

}

注意:1)切面类要添加@Aspect和@Component注解

          2)要在spring的xml文件中添加扫描该切面类所在的包

          3)例子中的doBefore和doAfter是两种可以的方式

4、在Controller中的方法中用自定义注解@MyAnnotation

@RequestMapping("/test/aspect")
    @ResponseBody
    @MyAnnotation
    public void testAnnotationAspect() {
        log.info("do testAnnotationAspect......");
        userService.getUserName();
    }

5、在spring的xml文件中添加


    

注意:1)直接在Controller的方法上使用注解,则需要同时在springMVC的xml配置文件中添加5所添加的内容。

运行结果:


web项目可以只在springMVC的xml配置文件中配置:

另外:使用@Slf4j需添加slf4j所需的jar包slf4j-api、slf4j-log4j12。添加log4j.properties文件。IntelliJ IDEA中添加lombok插件。


你可能感兴趣的:(java基础)