Java通过工厂、Map容器创建对象的方法
一、通过工厂+反射+配置文件创建对象
通过工厂+反射+配置文件获取对象
/** * @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创建对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot 过滤器、拦截器、监听器对比及使用场景分析
过滤器是处于客户端和服务器资源文件之间的一道过滤网,这篇文章主要介绍了SpringBoot 过滤器、拦截器、监听器对比及使用场景分析,需要的朋友可以参考下2021-05-05浅谈hibernate中对象的3种状态_瞬时态、持久态、脱管态
下面小编就为大家带来一篇浅谈hibernate中对象的3种状态_瞬时态、持久态、脱管态。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-08-08Java Set集合及其子类HashSet与LinkedHashSet详解
这篇文章主要介绍了Java Set集合及其子类HashSet与LinkedHashSet详解,文章通过Set集合存储原理展开文章主题相关介绍,感兴趣的小伙伴可以参考一下2022-06-06JavaScript 与 Java 区别介绍 学java怎么样
JavaScript 是一种嵌入式脚本文件,直接插入网页,有浏览器一边解释一边执行。而java 语言不一样,他必须在JAVA虚拟机上运行。而且事先需要进行编译。接下来脚本之家小编给大家揭晓js与java区别,感兴趣的朋友一起看看吧2016-09-09
最新评论