在什么样的场景下,需要利用到Java的反射特性编程?

来源:互联网 发布:借壳上市案例分析 知乎 编辑:程序博客网 时间:2024/05/22 01:54

Java的反射特征一般结合注解和配置文件(如:XML)来使用,这也是大部分的框架(Spring等)支持两种配置方式的原因。

如果是注解方式:当服务端启动时,Spring框架会去扫描指定目录下的类,通过反射看类有没有Service注解,如果类上有Service注解,会提前初始化(new)这个类。初始化好所有的类以后,再去查找所有的属性,看属性有没有Autowired注解,有的话,会给这个属性注入值(反射赋值)

如果是XML方式:原理也差不多,只不过是先解析XML,拿到XML中的配置信息,再去初始化(new)或给属性反射赋值,所以我们些业务代码的时候才不用一个个的去new实现类,所有的参数都赋上值,这部分的工作Spring已经利用反射技术给完成了的。

1:反射提供了一种”俯瞰”和”透视”类和对象内部信息的能力,让你在处理一些全局性的、常规方法不好搞定的需求的时候,有了降维打击的能力。

2:当你需要在配置文件中决定业务代码需要执行哪个具体类和方法的时候,你用反射。如果没有反射,就没有Strut,如果没有反射,就没有白盒子单元测试。

3:在你编译是不能直接调用,运行时可以调用的情况下,用反射

4:反射和注解,是在框架层编写通用业务代码的好手段,可以有效减少业务代码。

5:通过反射,我们可以在运行时获得程序或程序集中每个类型的成员和成员的信息。程序中一般的对象的类型都是在编译期就确定下来的,而Java反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。
反射的核心是JVM在运行时才动态加载类或者调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。

6:当我们在使用IDE(如Eclipse,IDEA)时,当我们输入一个对象或类并想调用它的属性或方法时,一按点号,编译器就会自动列出她的属性或方法,这里就用到了反射。

7:反射最重要的用途就是开发各种通用的框架。
很多框架(如Spring)都是配置化的(比如通过XML文件配置JavaBean,Action之类的),为了保证框架的通用性,它们可能需要根据配置文件加载不同的对象或类,调用不同的方法。这个时候就必须用到反射——运行时动态加载需要加载的对象。

Java反射框架主要提供以下功能:

1.在运行时判读任意一个对象所属的类;
2.在运行时构造任意一个类的对象;
3.在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);
4.在运行时调用任意一个对象的方法;

重点:是运行时而不是编译时;

原创粉丝点击