Java通过工厂、Map容器创建对象的方法

 更新时间:2021年03月30日 09:34:14   作者:小小张自由—>张有博  
这篇文章主要介绍了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创建对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java将对象保存到文件中/从文件中读取对象的方法

    Java将对象保存到文件中/从文件中读取对象的方法

    下面小编就为大家带来一篇Java将对象保存到文件中/从文件中读取对象的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 深入理解什么是Mybatis懒加载(延迟加载)

    深入理解什么是Mybatis懒加载(延迟加载)

    这篇文章主要介绍了深入理解什么是Mybatis懒加载(延迟加载),mybatis的懒加载,也称为延迟加载,是指在进行关联查询的时候,按照设置延迟规则推迟对关联对象的select查询,延迟加载可以有效的减少数据库压力,需要的朋友可以参考下
    2023-10-10
  • Java如何利用策略模式替代if/else语句

    Java如何利用策略模式替代if/else语句

    这篇文章主要介绍了Java如何利用策略模式替代if/else语句,帮助大家优化自己的代码,提高程序运行效率,感兴趣的朋友可以了解下
    2020-09-09
  • java http请求获取图片并返回文件流给前端的方法步骤

    java http请求获取图片并返回文件流给前端的方法步骤

    作为一名Java后端开发者,掌握如何从后端返回文件流至前端是基本技能之一,这篇文章主要介绍了java http请求获取图片并返回文件流给前端的方法步骤,需要的朋友可以参考下
    2024-09-09
  • 详解JAVA 线程-线程的状态有哪些?它是如何工作的?

    详解JAVA 线程-线程的状态有哪些?它是如何工作的?

    这篇文章主要介绍了详解JAVA 线程的的相关资料,文中讲解非常细致,源码帮助大家更好的理解和学习,感兴趣的朋友可以参考下
    2020-06-06
  • Java中的transient关键字解析

    Java中的transient关键字解析

    这篇文章主要介绍了Java中的 transient关键字解析,有时候我们的一些敏感信息比如密码并不想序列化传输给对方,这个时候transient关键字就派上用场了,如果一个类的变量加上了transient关键字那么这个字段就不会被序列化,需要的朋友可以参考下
    2023-09-09
  • SpringCloud LoadBalancer自定义负载均衡器使用解析

    SpringCloud LoadBalancer自定义负载均衡器使用解析

    LoadBalancerClient 是 SpringCloud 提供的一种负载均衡客户端,Ribbon 负载均衡组件内部也是集成了 LoadBalancerClient 来实现负载均衡,本文给大家深入解析 LoadBalancerClient 接口源码,感兴趣的朋友跟随小编一起看看吧
    2023-04-04
  • Java中URL的处理方法详解

    Java中URL的处理方法详解

    URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址,表示为互联网上的资源,本文主要为大家介绍了Java是如何处理URL的,感兴趣的可以了解一下
    2023-05-05
  • 详解java整合solr5.0之solrj的使用

    详解java整合solr5.0之solrj的使用

    本篇文章主要介绍了详解java整合solr5.0之solrj的使用 ,具有一定的参考价值,有兴趣的可以了解下
    2017-06-06
  • 彻底搞懂java并发ThreadPoolExecutor使用

    彻底搞懂java并发ThreadPoolExecutor使用

    这篇文章主要为大家介绍了彻底搞懂java并发ThreadPoolExecutor使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02

最新评论