反射和代理 总是分不清

反射

作用:
1.可以创建对象。
2.调用对象的方法。
3.设置和获取对象的属性。
4.获取类名、包名等等
用反射可以操作这个类的一切信息。反射就是对自身的自省

获取字节码对象的三种方式

类名.class
对象名.getClass()
Class.forName(类的全限定名)

获取一个类的方法

1,getMethods()和getDeclaredMethods()获取类的所有方法
getMethod(“方法名”,参数的类型.class…)
getDeclaredMethod(“方法名”,参数的类型.class…)

2,调用方法
method.invoke(对象,参数…)

3.获取类中的成员变量
getFields()和getDeclaredFields()

getField(参数名)和getDeclaredField(参数名)

4,获取参数值
field.get(对象)

5,设置参数值
field.set(对象,参数值)

代理

1,动态代理它可以直接给某一个目标对象(委托对象)生成一个代理对象,而不需要代理类存在。

甚至它还能够给某一个接口直接生成代理对象,而不需要委托类和代理类的存在。

2,动态代理与静态代理模式原理是一样的,只是动态代理类的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以不存在代理类的字节码文件。代理者和委托者的关系是在程序运行时确定。

3,还有个cglib,只是不用实现接口

动态代理的使用

Proxy.newProxyInstance(classLoader,interfaces,invocationHandler)
1. classLoader,类加载器对象
2. interfaces,委托者实现的所有接口的字节码对象的数组
3. InvocationHandler接口的实现类对象

通过上述方法我们就能得到代理对象,使用委托者实现的接口类型执行代理对象


InvocationHandler接口中的invoke(Object proxy,Method method,Object[] args)
1.该方法是代理对象调用任意方法的时候执行
2.参数
	1.proxy代理对象本身
	2.method就是代理对象调用的方法
	3.args代理对象调用的方法传入的参数
	
3.invoke方法的返回值就是代理对象调用的方法的返回值

使用过程

  • 第一步:定义一个代理接口

  • 第二步:写两个委托类实现上述接口

  • 第三步:定义一个类实现InvocationHandler接口

  • 第四步:在调用者中,使用Proxy.newProxyInstance()方法创建代理对象

总结,还是很重要,欢迎交流

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值