• Spring中Aspect的切入点的表达式定义细节


    用过很多次切面aspect了,对于表达式总是记得很模糊,今天总结一下。

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

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

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

    @Aspect
    public class MyInterceptor {
        @Pointcut("execution(* cn.xjy.service.impl.PersonServiceBean.*(java.lang.String,..))")
        private void anyMethod() {
        }// 声明一个切入点
    
        //即为这两个方法被拦截到
        @Override
        public void save(String name) {
            System.out.println("这是save方法");
        }
    
        @Override
        public void update(String name,Integer id ) {
            System.out.println("这是update方法");
        }
    }
    
    
    3、做如下配置则会拦截到所有返回值类型为非void的方法

    @Aspect
    public class MyInterceptor {
    
        @Pointcut("execution(!void cn.xjy.service.impl.PersonServiceBean.*(..))")
        private void anyMethod() {
        }// 声明一个切入点
        
    }
    
    
    
    4、以下配置代表Spring框架会拦截cn.xjy.service包以及其子包下的所有类的所有方法

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

    Spring框架会为满足cn.xjy.service..*底下所有的类创建代理对象 ;
    创建代理对象:里面的类实现了接口–使用JDK创建动态代理技术来创建,若没有实现接口:采用CGlib的方法来创建代理对象
  • 相关阅读:
    面试题: !=!=未看12 略多 sql语句练习 非常 有用
    面试题--阿里
    LeetCode--Count Primes
    (转载)协方差的意义
    LeetCode--Isomorphic Strings
    LeetCode--Reverse Linked List(Java)
    JDBC连接数据库的过程
    (转载)Java中如何遍历Map对象的4种方法
    Ubuntu下Eclipse中运行Hadoop程序的参数问题
    Hadoop上配置Hbase数据库
  • 原文地址:https://www.cnblogs.com/xujingyang/p/9341085.html
Copyright © 2020-2023  润新知