使用BeanFactory实现创建对象

 更新时间:2018年08月26日 14:37:07   作者:魔灵儿  
这篇文章主要为大家详细介绍了使用BeanFactory实现创建对象,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了BeanFactory实现创建对象的具体代码,供大家参考,具体内容如下

说明:

 其作用是减少层与层之间的依赖。

实现步骤:

编写2个类(Student,Teacher)再编写beans.properties文件,接着编写BeanFactory类,最后编写测试类BeanTest。

参考代码如下:

/**
 *beans.properties文件的内容(位于与src平级的config资源包下)
 */
Student=com.xxx.generic.demo.Student
Teacher=com.xxx.generic.demo.Teacher
 
/**
 *BeanFactory类的参考代码
 */
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
 
public class BeanFactory {
 private BeanFactory() {
 }
 
 private static Map<String, String> beans = new HashMap<>();
 static {
 InputStream is = BeanFactory.class.getClassLoader().getResourceAsStream("beans.properties");
 Properties prop = new Properties();
 try {
  prop.load(is);
  Enumeration<String> keys = (Enumeration<String>) prop.propertyNames();
  while (keys.hasMoreElements()) {
  String key = keys.nextElement();
  String value = prop.getProperty(key);
  beans.put(key, value);
  }
 } catch (Exception e) {
  e.printStackTrace();
 } finally {
  if (is != null) {
  try {
   is.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
  }
 }
 }
 
 public static <T> T getBean(Class<T> clazz) {
 T t = null;
 String className = clazz.getSimpleName();
 Set<String> keys = beans.keySet();
 for (String key : keys) {
  if (key.equals(className)) {
  String value = beans.get(key);
  try {
   t = (T) Class.forName(value).newInstance();
  } catch (Exception e) {
   e.printStackTrace();
  }
  break;
  }
 }
 return t;
 }
}
 
/**
 *BeanTest类参考代码
 */
public class BeanTest {
 public static void main(String[] args) {
 Student s = BeanFactory.getBean(Student.class);
 System.out.println(s + ":我是" + s.getClass().getSimpleName() + "的一个对象。");
 Teacher t = BeanFactory.getBean(Teacher.class);
 System.out.println(t + ":我是" + t.getClass().getSimpleName() + "的一个对象。");
 }
}

运行结果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot 项目中使用Swagger2的示例

    Spring Boot 项目中使用Swagger2的示例

    本篇文章主要介绍了Spring Boot 项目中使用Swagger2的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Javaweb 500 服务器内部错误的解决

    Javaweb 500 服务器内部错误的解决

    这篇文章主要介绍了Javaweb 500 服务器内部错误的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java用split分割含一个或多个空格的字符串案例

    Java用split分割含一个或多个空格的字符串案例

    这篇文章主要介绍了Java用split分割含一个或多个空格的字符串案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来过来看看吧
    2020-09-09
  • Java String初始化String域例题解析

    Java String初始化String域例题解析

    这篇文章主要介绍了Java String初始化String域例题解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Springboot整合Flowable6.x导出bpmn20的步骤详解

    Springboot整合Flowable6.x导出bpmn20的步骤详解

    这篇文章主要介绍了Springboot整合Flowable6.x导出bpmn20,Flowable流程引擎可用于部署BPMN 2.0流程定义,可以十分灵活地加入你的应用/服务/构架,本文给出两种从flowable导出流程定义bpmn20.xml的方式,需要的朋友可以参考下
    2023-04-04
  • hibernate多表操作实例代码

    hibernate多表操作实例代码

    这篇文章主要介绍了hibernate多表操作实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • MyBatis-Plus中提供的各种注解详细说明

    MyBatis-Plus中提供的各种注解详细说明

    这篇文章主要介绍了MyBatis-Plus中提供的各种注解详细说明,下面对MyBatis-Plus提供的注解进行整理,本文提供了部分示例代码以方便理解,需要的朋友可以参考下
    2023-11-11
  • javaDSL简单实现示例分享

    javaDSL简单实现示例分享

    DSL领域定义语言,用来描述特定领域的特定表达。比如画图从起点到终点;路由中的从A到B。这是关于画图的一个简单实现
    2014-03-03
  • mybatis中查询结果为空时不同返回类型对应返回值问题

    mybatis中查询结果为空时不同返回类型对应返回值问题

    这篇文章主要介绍了mybatis中查询结果为空时不同返回类型对应返回值问题,本文分几种方法给大家介绍的非常详细,需要的朋友可以参考下
    2019-10-10
  • 解决springboot中mongodb不启动及Dao不能被扫描到的问题

    解决springboot中mongodb不启动及Dao不能被扫描到的问题

    这篇文章主要介绍了解决springboot中mongodb不启动及Dao不能被扫描到的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05

最新评论