您的位置:首页 > 编程语言 > Java开发

java 反射 reflect 深入理解动态反射

2018-01-10 16:10 423 查看
说一下java中的反射机制,反射具体的定义我们就不啰嗦了。

一,说一下java 中反射的三种方式:1 ,Class.forName("包名.类名");2,java 为每个类型都提供了.class 属性,3,java 为每个类都提供了 “类实例".getClass;

二,我们主要来说一下第一种,也是在实际中用的最多的一种。因为后两种方式都需要创建实例对象,没有办法进行动态加载。 先来思考一个问题,如果我们现在有一个App应用已经上线,我们无法看到其源代码,我们还想给它添加功能,首先App需要给我们提供一个接口,实现动态添加功能。后两种方法就不能实现了。下面我们来一起分析一下。

三 1,下面我们来一个实例,用接口的方式实现动态。创建一个Car(车)的接口。



2,创建一个实现类,RedCar



3,创建一个中间类CarImpil public void car(接口类型 实例) 接口类型 = new 实现类



4,在 mian 方法中去实现多态





6,现在我们就实现多态了有不同的车 我们就 把不同的车的实例被 CarImpli.car()方法调用,下面我们用反射来实现看下效果



这种就是反射通过Class.froName("包名.类名").newInstance();创建它的实例;

7,现在用反射实现了,但是好像并没有完成我们上面的问题,现在我们把 实体对象拿出来,写入一个配置文件





car.properties 和在项目文件夹下创建

8,我们来写一个方法来读取配置文件的内容



这样我们就可实现上面所说的整个App都是封装好的,我们需要添加什么只需要通过car.properties 文件把它的(“包名.类名”)传进来就可以实现。我们所写的方法只要实现 Car这个接口,通过.properties文件 就可以了

总结:Class.forName() 这个方法可以拿到 java的字节码文件,你就可以操作关于它的一切,包括私有对象,关于反射 java 专门提供了java.lang.reflect 有详细的说明。大家体会一下,我们的Tomcat 中
web.xml spring 各种框架的配置是不是都是这种方式? 如有错误还挺谅解,并指出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息