Spring中Aspect的切入点语法定义细节

来源:互联网 发布:马自达 mx5 rf 知乎 编辑:程序博客网 时间:2024/06/05 16:15

切面做如下设置则只会拦截返回值为String类型的方法

/以下为声明切面@Aspectpublic class MyInterceptor {    @Pointcut("execution(java.lang.String cn.itcast.service.impl.PersonServiceBean.*(..))")    private void anyMethod() {    }// 声明一个切入点
    @Override    public String getPersonName(Integer id) {        System.out.println("这是getPersonName方法");        return "yyy";    }}//即只会拦截这个方法

做如下配置则只会拦截,传入参数值第一个为String类型的方法(不管后面有没有其他方法)

@Aspectpublic class MyInterceptor {    @Pointcut("execution(* cn.itcast.service.impl.PersonServiceBean.*(java.lang.String,..))")    private void anyMethod() {    }// 声明一个切入点
//即为这两个方法被拦截到    @Override    public void save(String name) {//      throw new RuntimeException("i love Exception");        System.out.println("这是save方法");    }    @Override    public void update(String name,Integer id ) {        System.out.println("这是update方法");    }

做如下配置则会拦截到所有返回值类型为非void的方法

@Aspectpublic class MyInterceptor {    @Pointcut("execution(!void cn.itcast.service.impl.PersonServiceBean.*(..))")    private void anyMethod() {    }// 声明一个切入点

以下配置代表Spring框架会拦截cn.itcast.service包以及其子包下的所有类的所有方法

@Aspectpublic class MyInterceptor {    @Pointcut("execution(* cn.itcast.service..*.*(..))")    private void anyMethod() {    }// 声明一个切入点

Spring框架会为满足cn.itcast.service..*底下所有的类创建代理对象 ;创建代理对象:里面的类实现了接口–使用JDK创建动态代理技术来创建,若没有实现接口:采用CGlib的方法来创建代理对象

0 0
原创粉丝点击