一.提出问题
new一个对象的速度要比反射的newInstance快,为什么还要使用反射进行生成对象?
解答1:
1.举例:
假设有一个场景:一共有50个Excel模板,每一个Excel模板的字段不同、格式不同、填写的内容也不同,后台需要根据用户上传的模板来读取里面的内容再进行后台逻辑的处理。
2.解决方案:
①.常规的根据用户上传的模板做不同的判断,对不同字段进行不同的处理,例如:
if(excel1){
new Excel1()
}if(excel2){
new Excel2()
}.....if(Excel50){
new Excel50()
}
弊端:50个if 处理要命
②.使用反射读取Excel模板编号再做逻辑处理
ExcelTemp clazz = Class.forName(ExcelTempCode).newInstance();
也可以使用Spring来实现这一块,更简单一些
处理类实现ApplicationContextAware接口 然后得到当前容器的ApplicationContex对象 再使用getBean方法获取对应的类
在注入ExcelTemp 的时候要使用@Component("Excel01")这样去定义好bean的名称
解答2:框架
我们使用框架的目的在于简化开发,形成规范,这个规范就在于如何让所有开发人员在开发出业务代码的时候还能适配框架。
拿Spring来说,我们开发人员千千万万,业务逻辑千千万万,要new的对象更是千千万万,Spring不可能预料的到我们所有人所创建的对象并把它放到他的框架本身里面,所以就有了BeanFactory,我们要使用什么对象就通过(此处只举例XML形式)XML配合getBean(BeanName)来获取就可以了。
<bean id="myTestImpl" class="com.lixiao.demo.spring.service.MyTestImpl"/>
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
Object myTestImpl = context.getBean("myTestImpl");