反射 & 动态代理

目录

一、什么是反射?

二、获取class对象的三种方式​编辑

1、Class.forName("全类名");

2、类名.class

3、对象.getClass();

4、代码实现

三、反射获取

1、利用反射获取构造方法

①、示例代码:​编辑

②、获取所有的构造方法:​编辑

③、获取单个构造方法:

​编辑④、获取方法权限修饰符:

​编辑

​编辑⑤、获取参数个数、获取参数类型、获取所有参数:

​编辑

⑥、获取私有:(暴力反射)

2、利用发射获取成员变量​编辑

①、获取class字节码文件的对象​编辑

②、获取所有公共成员变量

​编辑③、获取所有成员变量

​编辑④、获取单个的成员变量

⑤、获取权限修饰符

​编辑⑥、获取成员变量的名字

​编辑⑦、获取成员变量的数据类型

​编辑⑧、获取成员变量记录的值

​编辑⑨、修改对象里面记录的值

​编辑3、利用反射获取成员方法

①、获取class字节码文件对象

​编辑②、获取里面所有的公共方法对象

③、获取里面所有的方法对象

​编辑④、获取单个的方法

​编辑⑤、获取方法的修饰符

​编辑⑥、获取方法的名字

​编辑⑦、获取方法的形参

​编辑⑧、获取方法的抛出的异常

​编辑⑨、方法运行

四、反射的作用​编辑

1、练习1:保存信息​编辑

2、练习2:跟配置文件结合动态创建​编辑

3、小结getClass()是定义在Object类中的,因此所有的对象都可以调用它

五、动态代理

​编辑1、什么是动态代理?动态代理可以无侵入式的给代码增加额外的功能

2、程序为什么需要代理?代理长什么样?

​编辑①、示例代码BigStar.java(JavaBean)

3、小结

​编辑4、如何为Java对象创建一个代理对象?

①、newProxyInstance(1,2,3)

​编辑②、示例代码:(创建一个代理)ProxyUtil.java

③、小结


一、什么是反射?

反射允许对封装类的字段,方法和构造函数的信息进行编程访问
换句话说就是(从类里拿出来)

可以获取到:(利用反射,我们可以获取到类中所有的东西)

获取是先从class字节码文件中获取的

二、获取class对象的三种方式


三种方式也对应了三种阶段

1、Class.forName("全类名");


全类名 = 包名+类名

2、类名.class


3、对象.getClass();


4、代码实现


三种方式获取到的字节码文件对象其实是一样的

三、反射获取


1、利用反射获取构造方法

 


①、示例代码:


②、获取所有的构造方法:


③、获取单个构造方法:


④、获取方法权限修饰符:


⑤、获取参数个数、获取参数类型、获取所有参数:

 


⑥、获取私有:(暴力反射)


2、利用发射获取成员变量


①、获取class字节码文件的对象


②、获取所有公共成员变量


③、获取所有成员变量


④、获取单个的成员变量

⑤、获取权限修饰符


⑥、获取成员变量的名字


⑦、获取成员变量的数据类型


⑧、获取成员变量记录的值


⑨、修改对象里面记录的值


3、利用反射获取成员方法


①、获取class字节码文件对象


②、获取里面所有的公共方法对象


包含父类中所有的公共方法

③、获取里面所有的方法对象


④、获取单个的方法


⑤、获取方法的修饰符


⑥、获取方法的名字


⑦、获取方法的形参


⑧、获取方法的抛出的异常


⑨、方法运行


四、反射的作用


1、练习1:保存信息


示例代码:

完整代码:(创建IO流存入本地文件)

2、练习2:跟配置文件结合动态创建


示例代码:

(配置文件 prop.properties)

反射和配置文件结合,动态创建对象

老师:

 

 

3、小结
getClass()是定义在Object类中的,因此所有的对象都可以调用它

五、动态代理


1、什么是动态代理?
动态代理可以无侵入式的给代码增加额外的功能

2、程序为什么需要代理?代理长什么样?


①、示例代码
BigStar.java(JavaBean)

Star.java(接口)

3、小结


4、如何为Java对象创建一个代理对象?


①、newProxyInstance(1,2,3)


②、示例代码:(创建一个代理)
ProxyUtil.java

参数一:固定格式

参数二:指定数组,如果有多个接口,可以将多个接口都放入数组

参数三:匿名内部类

测试类:

JavaBean(BigStar)

③、小结

1Java提供了什么API帮我们创建代理?
newProxyInstance(1,2,3)
newIProxyInstance方法在创建代理时,需要接几个参数,每个参数的含义是什么?
三个参数,参数1:用于指定用哪个类加载器
参数3: 用来指定生成的代理
参数2: 指定接口:
对象要干什么事情


通过invokehandler的invoke方法指定代理干的事时,这个invoke会被谁调用? 要接哪几个参数?
bigstar, argsll
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值