美文网首页
aspectj注解方式创建切面

aspectj注解方式创建切面

作者: KeDaiBiaO1 | 来源:发表于2017-11-15 16:26 被阅读0次
  1. 切点
    切点是一个接口,切点表达式定义的方法(切点的方法)执行的时候触发通知
    切点不需要使用 aspectj注解声明,只需要注入到spring上下文bean。
  2. 切面
    通知切面在切点方法执行前后做一些动作。
    使用 aspectj注解 (@Aspect 加在类上) 声明一个切面。
    切点表达式加在方法上(有5种) 这样在切点方法执行的时候 按5中顺序执行切面的方法
//需要加的依赖
dependencies {
    compile("org.springframework:spring-context:${springVersion}")
    // https://mvnrepository.com/artifact/org.springframework/spring-aop
    compile("org.springframework:spring-aop:${springVersion}")
    // https://mvnrepository.com/artifact/org.aspectj/aspectjrt
    compile("org.aspectj:aspectjrt:${aspectJVersion}")
    // https://mvnrepository.com/artifact/org.aspectj/aspectjweaver
    compile("org.aspectj:aspectjweaver:${aspectJVersion}")
    // https://mvnrepository.com/artifact/com.google.code.gson/gson
    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile("org.springframework:spring-test:${springVersion}")
}
//切点
@Component
public class Film implements Performance {

    @Override
    public void perform() {
        System.out.println("电影播放");
    }
}

//切点的实现类
@Component
public class Film implements Performance {

    @Override
    public void perform() {
        System.out.println("电影播放");
    }
}
//切面
@Component
@Aspect
public class Audience {
//使用Pointcut注解,可以减少重复的声明切点表达式  (对比@Before(切点表达式))
    @Pointcut("execution(** aspectj.Performance.perform(..))")
    public void performance(){}
//使用上面的方法代替切点表达式
    @Before("performance()")
    public void silenceCellPhone(){
        System.out.println("Silencing cell phone");
    }
}
tips
  1. idea是否自动导入 不是自动导入右下角提示 autocomplete
  2. 导入依赖的2种方式
//可以统一用 gradle.properties中的属性来管理version
compile("com.google.code.gson:gson:${gsonVersion}")
//mvn提供的方式
testCompile group: 'junit', name: 'junit', version: '4.12'
  1. within()和bean()指示器 还有 and or not(应用于切点表达式)

相关文章

网友评论

      本文标题:aspectj注解方式创建切面

      本文链接:https://www.haomeiwen.com/subject/cjqhvxtx.html