JAVA的反射机制
java语言和其他语言相比,一个很重要的特性就是java的反射机制,反射机制为软件开发带来了一种新的思想和架构,下面是我对java反射机制的一些作用的总结。
反射就是程序运行过程中,对于一个任意一个类,可以动态创建它的对象,获取类的属性和方法。对于任意一个对象,可以获取该对象所属的类,调用该对象的方法。这种动态的获取和调用对象的方法的特性叫java的反射机制。
反射(Reflection)能够让运行于JVM中的程序检测和修改运行时的行为。
反射的作用:
在运行时检测对象的类型;
动态构造某个类的对象;
检测类的属性和方法;
任意调用对象的方法;
修改构造函数、方法、属性的可见性;
java反射的使用
// 使用反射
Class<?> c = Class.forName(“classpath.and.classname”);
Object dog = c.newInstance();
Method m = c.getDeclaredMethod(“bark”, new Class<?>[0]);
m.invoke(dog);
反射在JAVA EE框架中的使用
一些常用的开源框架,比如Spring等都使用到了反射
例如,Spring框架使用如下的配置文件:
<bean id=”someID” class=”com.programcreek.Foo”>
<property name=”someField” value=”someValue” />
</bean>
初始化spring容器(ApplicationContext)时,读取配置文件,解析到这个bean时,会根据Class.forName("com.programcreek.Foo")来加载该类,产生Class对象,并创建该类的对象,根据反射获取<property>元素所对应的属性的setter()方法对该对象的属性进行赋值初始化。
此外,在web应用中,servlet对象的创建也使用了java的反射机制。例如: 在web.xml进行如下的配置:
<servlet>
<servlet-name>someServlet</servlet-name>
<servlet-class>com.programcreek.WhyReflectionServlet</servlet-class>
<servlet>
在应用服务器(tomcat、jboss等)启动,加载并解析该web.xml文件时,根据反射机制创建并初始化该servlet。