💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
~~~ package com.itheima.factory; /** * @author: hcf * @qq: 46914685 * @email: 46914685@qq.com */ import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.Properties; /** * 一个创建Bean对象的工厂 * Bean:在计算机英语中,有重用组件的含义 * JavaBean:用java语言编写的可重用组件 * javaBean 远大于 实体类 * <p> * 它就是创建我们的service和dao对象的 * <p> * 如何创建javaBean * 1.需要一个配置文件来配置我们的service和dao * 配置的内容:唯一标识=全限定类名(key=value) * 2.通过读取配置文件中配置的内容,反射创建对象 * <p> * <p> * 配置文件格式:可以是xml也可以properties */ public class BeanFactory { //定义一个Properties对象 private static Properties props; //定义一个Map,用于存放我们要创建的对象.我们把它称之为容器 private static Map<String, Object> beans; //使用静态代码块为Properties对象赋值 static代码块只运行一次,创建的对象是单例模式 static { //实例化对象 props = new Properties(); //获取properties文件的流对象 InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"); try { props.load(in); //实例化容器 beans = new HashMap<String, Object>(); //取出配置文件中所有的key Enumeration keys = props.keys(); //遍历枚举 while (keys.hasMoreElements()){ //取出每个key String key = keys.nextElement().toString(); //根据key获取value String beanPath = props.getProperty(key); //反射创建对象 Object value = Class.forName(beanPath).newInstance(); //把key和value存放容器中 beans.put(key,value); } } catch (Exception e) { // e.printStackTrace(); throw new ExceptionInInitializerError("初始化properties失败!"); } } /** * 根据bean的名称获取bean对象 * * @param beanName * @return */ // public static Object getBean(String beanName) { // Object bean = null; // String beanPath = props.getProperty(beanName); // try { // bean = Class.forName(beanPath).newInstance();//每次都会调用默认构造函数创建对象 // } catch (Exception e) { // e.printStackTrace(); // } // return bean; // } /** * 根据bean的名称获取bean对象 * * @param beanName * @return */ public static Object getBean(String beanName){ return beans.get(beanName); } } ~~~ ***** ~~~ accountService=com.itheima.service.impl.AccountServiceImpl accountDao=com.itheima.dao.impl.AccountDaoImpl ~~~ ***** ~~~ package com.itheima.ui; /** * @author: hcf * @qq: 46914685 * @email: 46914685@qq.com */ import com.itheima.factory.BeanFactory; import com.itheima.service.IAccountService; import com.itheima.service.impl.AccountServiceImpl; /** * 模拟一个表现层,用于调用业务层 * * 单例,多例 */ public class Client { public static void main(String[] args) { // AccountServiceImpl accountService = new AccountServiceImpl(); for (int i = 0; i < 5; i++) { IAccountService accountService = (IAccountService) BeanFactory.getBean("accountService"); System.out.println(accountService); accountService.saveAccount(); } // accountService.saveAccount(); } } ~~~