Java通过工厂、Map容器创建对象的方法
程序员文章站
2022-06-27 11:33:50
一、通过工厂+反射+配置文件创建对象通过工厂+反射+配置文件获取对象/** * @author: promsing * @date: 2021/3/7 - 10:09 * @description:...
一、通过工厂+反射+配置文件创建对象
通过工厂+反射+配置文件获取对象
/** * @author: promsing * @date: 2021/3/7 - 10:09 * @description: 通过使用工厂+配置文件+反射实现创建对象 * @version: 1.0 */ public class absfactory { //声明一个变量(多例模式,每次通过工厂都会创建一个不同的实例) private static object obj; public static object createtype(string createname){ //自动释放资源--使用绝对路径 try( inputstream is =new fileinputstream("src\\factory.properties")) { //配置文件类 properties pro=new properties(); pro.load(is); // system.out.println(pro.size()); //获取参数 string property = pro.getproperty(createname); obj = class.forname(property).newinstance(); } catch (instantiationexception e) { e.printstacktrace(); } catch (illegalaccessexception e) { e.printstacktrace(); } catch (classnotfoundexception e) { e.printstacktrace(); } catch (filenotfoundexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); }finally { return obj; } } }
配置文件如下
//以key,value的形式,主要value要写全类名,不要加分号 accountservice=com.dynamic.service.impl.accountserviceimpl accountdao=com.dynamic.dao.impl.accountdaoimpl
二、通过map容器间接获取对象
通过map容器间接获取对象,与spring中的ioc容器类似,采用立即加载策略
/** * @author: promsing * @date: 2021/3/19 - 11:50 * @description: 模仿ioc容器,将创建的对象放在map集合中,加载该类时会读取配置文件中,将类放入map中 * @version: 1.0 */ public class beanfactory { //定义一个properties对象 private static properties props; //定义一个map,用于存放我们创建的对象(单例,当类加载之后就有了对象,之后从map中获取) private static map<string,object> beans; //容器 static { try { props=new properties(); //将bean.properties放在了resources路径下 inputstream is=beanfactory.class.getclassloader().getresourceasstream("bean.properties"); props.load(is); //实例化容器 beans=new hashmap<string,object>(); //从配置文件中获取所有key值 enumeration<object> keys = props.keys(); while (keys.hasmoreelements()){ //取出每一个key string key = keys.nextelement().tostring(); //根据key获取value string path = props.getproperty(key); object value=class.forname(path).newinstance(); //放入容器中 beans.put(key,value); } }catch (exception e){ e.printstacktrace(); } } //提供一个访问map容器的入口 public static object getinstance(string name){ return beans.get(name); } }
配置文件内容如下
accountservice=com.dynamic.service.impl.accountserviceimpl accountdao=com.dynamic.dao.impl.accountdaoimpl
以上两部分归到根上都是通过反射创建对象,jdk8在反射创建对象时,做了很大的增强,提高了性能。其实spring ioc与以上实现创建对象的原理是一致的,spring ioc做的就是这件事情,只是它封装的更好而已(当然还有其他的增强,o(∩_∩)o哈哈~)。
到此这篇关于java通过工厂、map容器创建对象的方法的文章就介绍到这了,更多相关java创建对象内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
java通过反射创建对象并调用方法
-
【Java必修课】通过Value获取Map中的键值Key的四种方法
-
js+ajax处理java后台返回的json对象循环创建到表格的方法
-
Java零基础学习之路(九)Java对象的创建和使用方法
-
Java 为啥有的调用类中的方法不需要创建对象 有的需要?
-
java中两个对象间的属性值复制,比较,转为map方法实现
-
Effective Java笔记第一章创建和销毁对象第四节通过私有构造器强化不可实例化的能力
-
Java通过工厂、Map容器创建对象的方法
-
通过工厂模式批量创建对象后调用其中方法 出现XXXis not a function()问题原因
-
java带参方法的简单示例!以及创建对象时构造方法的同步调用