9. Reflect 反射

1. 类加载机制: ClassLoader 

2. 获取class文件的三种方式:
    1. 源文件阶段,编译期    (Person.java)               class.forName(String className)     一般用于配置文件读取
    2. 字节码阶段    ,运行期(Person.class)              类名.class        当做静态方法的锁对象
    3. 创建对象阶段,运行期(Person p=new Person)      p.getClass()    用于判断是否是同一个字节码对象(equals方法中会用到)

3. Class对象的API
    1. <T>          newInstance()   用该类的无参构造创建对象,如果对象没有无参构造,报错InstantiationException
    2. Constructor  getConstructor(参数的字节码对象 比如:String.class)    获取有参构造
    3. Field        getField(String str)  获取类中可见的属性(也叫字段)       
    4. Field        getDeclaedField(String str) 获取类中私有属性,还需要去除访问权限  setAccessible(true)
                    Field Api:
                        get(obj) 获取到该属性在obj中的值
                        set(obj,value)然后在通过set方法改变该属性在obj的值
    5. Method       getMethod(String methodName , Class<?> parameterTypes)  方法名称,参数的class文件
                    Method api:
                        invoke(Object obj,Object args)  指定对象,传入的参数

4. 动态代理:  就是A让另一个类,通过反射的方式,来执行A 中的方法功能,在实现代理时可以加强功能
            1. JDK中在Java中java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口就可以生成动态代理对象。JDK提供的代理只能针对接口做代理。我们有更强大的代理cglib,

             Proxy类中的方法创建动态代理类对象

             public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
             Object obj = Proxy.newProxyInstance(xx.getClass().getClassLoader,xx.getClass().getInterfaces, h)    
             最终会调用InvocationHandler的方法,需要实现h的子类,重写下面方法,增加你想要的功能
             InvocationHandler Object invoke(Object proxy,Method method,Object[] args)
             new InvocationHander(){
                Object invoke(Object proxy,Method method,Object[] args){
                //想要的功能
                //method.invoke(obj,args);  执行obj自己的方法功能 
                }
             }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值