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创建对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 编辑器Ueditor和SpringBoot 的整合方法

    编辑器Ueditor和SpringBoot 的整合方法

    本文通过实例代码给大家介绍了编辑器Ueditor和SpringBoot 的整合方法,需要的朋友参考下吧
    2017-08-08
  • Spring Cloud Zuul添加过滤器过程解析

    Spring Cloud Zuul添加过滤器过程解析

    这篇文章主要介绍了Spring Cloud Zuul添加过滤器过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 深入理解Spring的事务传播行为

    深入理解Spring的事务传播行为

    spring特有的事务传播行为,spring支持7种事务传播行为,确定客户端和被调用端的事务边界(说得通俗一点就是多个具有事务控制的service的相互调用时所形成的复杂的事务边界控制),这篇文章主要给大家介绍了关于Spring事务传播行为的相关资料,需要的朋友可以参考下。
    2018-02-02
  • 详解java中的Collections类

    详解java中的Collections类

    这篇文章主要为大家详细介绍了java中的Collections类,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • SpringBoot配置Profile实现多环境支持

    SpringBoot配置Profile实现多环境支持

    这篇文章主要介绍了SpringBoot配置Profile实现多环境支持操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 基于springboot微信公众号开发(微信自动回复)

    基于springboot微信公众号开发(微信自动回复)

    这篇文章主要介绍了基于springboot微信公众号开发(微信自动回复),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • SpringBoot+Mybatis实现Mapper接口与Sql绑定几种姿势

    SpringBoot+Mybatis实现Mapper接口与Sql绑定几种姿势

    通常我们在使用Mybatis进行开发时,会选择xml文件来写对应的sql,然后将Mapper接口与sql的xml文件建立绑定关系,然后在项目中调用mapper接口就可以执行对应的sql,感兴趣的可以学习一下
    2021-09-09
  • springmvc整合ssm配置的详细代码

    springmvc整合ssm配置的详细代码

    今天通过实例代码给大家介绍了springmvc整合ssm配置的详细方法,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • java实现一个扫描包的工具类实例代码

    java实现一个扫描包的工具类实例代码

    很多框架,比如springmvc,mybatis等使用注解,为了处理注解,必然要对包进行扫描,所以下面这篇文章主要给大家分享介绍了关于利用java如何实现一个扫描包的工具类,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-10-10
  • 分享Java常用几种加密算法(四种)

    分享Java常用几种加密算法(四种)

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。本文给大家分享java常用的几种加密算法,需要的朋友可以参考下
    2015-10-10

最新评论