反射来创建一个类的实例的好处是什么 各位大侠说说反射来创建一个类的实例的好处是什么为什么要用反射来创建一个类的实例 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我只知道一种情况:对象是从文件流或网络流中得到的被序列化了的对象,这时你不知道对象的类是什么(只知道它是一个Object),这时要创建与该对象同类型的对象时,必须反射。 一、反射来创建一个类的实例程序中不用new创建实例,二、根据一编译期就不会确定对象的类型, 这样就实现了动态的绑定,三、根据二增强了程序的扩展,如Class.forName("driver"),driver是通过配置文件配置的,当你要连接不同的数据库时,也许你就只要改一下配置文件就可以了,不用改动程序。对扩展开发,对修改关闭,著名的OPC原则。 一个非常简单的道理: <action name="*SaveAction" class="{1}Action" method="save"> <result name="success">{1}ListAction.do</result> <result name="json">/_template/struts-ext.jsp</result> <result name="input">/sms/{1}Inp.jsp</result> </action>我相信你能看的懂上面的代码。1.如果没有反射的话,spring如何根据配置文件生成你要的实例?2.如果没有反射的话,struts如何根据你的配置文件找到方法,并运行它?3.如果没有反射的话,你怎么能获得如此灵活的功能? http://topic.csdn.net/u/20091226/15/a95ab465-9791-43cc-85b1-77a702951c74.html spring上大名鼎鼎的注射机制就是反射的最后例子 用反射来创建一个类的实例,不是因为有什么好处,是因为需要比如:设计时不能确定 对象类型信息,运行时,通过配置文件或其他途径可以获取到 对象类型信息的时候。至于SpingFramework, 简单的说利用反射和动态代理(jdk1.3以后),通过配置文件,构建了一个Bean工厂。※反射不但可以根据 ClassName创建对象,还可以帮你分析 类结构。 不需要一个大switch-case用来根据类型生成对象.不需要注册机制的维护. 从Class theClass = ...来创 建一个实例theClass.newInstance() 或 theClass.getContructor(...).newInstance(....);的好处,就是theClass 是一个变量.当你编写程序时还未能确定, 在运行时要创建什么类的实例, 使用反射,是必须的-------------------而 new XXXX(...) 这是硬编码了的, 定下来后,运行时就变不了啦.例如有一个方法:/** * 根据传入的类名创建实例 */public static Object createObject(String className) throws Exception { return Class.forName(className).newInstance();}这样子,在编码时,你预料不到运行时将会传入什么样的类名.你就得使用反射了.你总不能够public static Object createObject(String className) throws Exception { if ("java.util.Date".equals(className)) { return new java.util.Date(); } else if ("java.lang.Integer".equals(className)) { return new java.lang.Integer(); } else if ("java.lang.Double".equals(className)) { return new java.lang.Double(); } else if ("java.util.ArrayList".equals(className)) { return new java.util.ArrayList(); } else if ( "..." .equals(className)) { return new ...(); } return null;}这样子,你能写多少个 if ... else if ... 啊能列举得完么??? SSH 哪个不用到反射的反射是java的灵魂还有一些设计模式会用到 java中“泛型”的意思?? java读取一个新的图形文件格式会用到哪些知识 具体点 servlet中嵌入javascript代码不能执行??? 新手问题 超简单!!! 一个关于JXTA Shell的问题(懂JXTA的进) [swing]问个基础问题,swing里的鼠标双击是怎么判断的? 高分求菜问题 文件I/O的问题 救命,各位GG,JJ...... 小问题:在线程中调用sleep()使其睡眠的时候,此线程是否释放所占的资源? Xerces-J-src.2.9.1和Xerces-J-bin.2.9.1区别 用过htmlparser帮忙看下
二、根据一编译期就不会确定对象的类型, 这样就实现了动态的绑定,
三、根据二增强了程序的扩展,如Class.forName("driver"),driver是通过配置文件配置的,当你要连接不同的数据库时,也许你就只要改一下配置文件就可以了,不用改动程序。对扩展开发,对修改关闭,著名的OPC原则。
<action name="*SaveAction" class="{1}Action" method="save">
<result name="success">{1}ListAction.do</result>
<result name="json">/_template/struts-ext.jsp</result>
<result name="input">/sms/{1}Inp.jsp</result>
</action>
我相信你能看的懂上面的代码。
1.如果没有反射的话,spring如何根据配置文件生成你要的实例?
2.如果没有反射的话,struts如何根据你的配置文件找到方法,并运行它?
3.如果没有反射的话,你怎么能获得如此灵活的功能?
设计时不能确定 对象类型信息,运行时,通过配置文件或其他途径可以获取到 对象类型信息的时候。至于SpingFramework, 简单的说利用反射和动态代理(jdk1.3以后),通过配置文件,构建了一个Bean工厂。※反射不但可以根据 ClassName创建对象,还可以帮你分析 类结构。
/**
* 根据传入的类名创建实例
*/
public static Object createObject(String className) throws Exception {
return Class.forName(className).newInstance();
}这样子,在编码时,你预料不到运行时将会传入什么样的类名.
你就得使用反射了.你总不能够public static Object createObject(String className) throws Exception {
if ("java.util.Date".equals(className)) {
return new java.util.Date();
} else if ("java.lang.Integer".equals(className)) {
return new java.lang.Integer();
} else if ("java.lang.Double".equals(className)) {
return new java.lang.Double();
} else if ("java.util.ArrayList".equals(className)) {
return new java.util.ArrayList();
} else if ( "..." .equals(className)) {
return new ...();
}
return null;
}这样子,你能写多少个 if ... else if ... 啊
能列举得完么???
SSH 哪个不用到反射的反射是java的灵魂还有一些设计模式会用到