AOP动态代理

aop的实现原理: 动态代理机制-->反射

一、反射- reflect

  • 什么是反射

1. mybatis的动态sql
  反射是指在运行期执行一些操作(加载类对象,创建对象,调用方法...)
  • api方法

    • Class类

    • 获取类方法

    获取类中的成员变量/属性
        getDeclaredFields():Field[]
    获取类中的方法
        getDeclaredMethods(): Method[]
    获取方法的名称
        Method类中: getName()
  • 执行类方法

    1. 根据类名加载类对象
            Class.forName(类名) -- Class
    2. 创建对象
            Class类中: newInstance()
    3. 运行期,让方法执行:
        Method类中: invoke(Object target,Object...args):Object

    注意点: 反射可以访问私有成员,但是需要先放开权限,通过调用方法放开: setAccessable(true)

  • 案例: 在运行期,用户输入一个类名,创建该类的对象,调用类中所有以test开头的方法.

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException {
            System.out.println("请输入类名:");
            Scanner scanner = new Scanner(System.in);
            String className = scanner.nextLine();
            //根据类名加载得到Class对象
            Class cls = Class.forName(className);
            //创建该类的实例
            Object target = cls.newInstance();
            //调用所有以test开头的方法
            Method[] methods = cls.getDeclaredMethods();
            for (Method method:methods) {
                if(method.getName().startsWith("test")){
                    Object returnVal = method.invoke(target);
                    System.out.println(method.getName()+"的返回值为:"+returnVal);
                }
            }
        }

后边真正的动态代理需要等以后补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值