使用工厂来解耦

网友投稿 556 2022-11-29

使用工厂来解耦

使用工厂来解耦

以前我们编写web项目总是dao层service层,在service调用dao里面时会用到以下代码

private IAccountDao accountDao = new AccountDaoImpl();

= new AccountServiceImpl();

一个是service调用dao 一个是servlet调用service都是耦合性十分强的操作 为了降低这个耦合性,我们引用了工厂BeanFactory

一个创建Bean对象的工厂Bean:在计算机英语中,有可重用组件的含义。JavaBean:用java语言编写的可重用组件。 javabean > 实体类它就是创建我们的service和dao对象的。第一个:需要一个配置文件来配置我们的service和dao配置的内容:唯一标识=全限定类名(key=value)第二个:通过读取配置文件中配置的内容,反射创建对象我的配置文件可以是xml也可以是properties 这里 在resources下面创建bean.properties文件,定义全限定类名 唯一标识=全限定类名(key=value)

=com.service.impl.AccountServiceImpl accountDao=com.dao.impl.AccountDaoImpl

接着我们创建一个工厂类来创建我们的service和dao对象的 BeanFactory.java

package com.factory;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 > 实体类 * * 它就是创建我们的service和dao对象的。 * * 第一个:需要一个配置文件来配置我们的service和dao * 配置的内容:唯一标识=全限定类名(key=value) * 第二个:通过读取配置文件中配置的内容,反射创建对象 * * 我的配置文件可以是xml也可以是properties */public class BeanFactory { //定义一个Properties对象 private static Properties props; //定义一个Map,用于存放我们要创建的对象。我们把它称之为容器 private static Map beans; //使用静态代码块为Properties对象赋值 static { try { //实例化对象 props = new Properties(); //获取properties文件的流对象,这里用类加载器来获取 InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"); props.load(in); //实例化容器 beans = new HashMap(); //取出配置文件中所有的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){ throw new ExceptionInInitializerError("初始化properties失败!"); } } /** * 根据bean的名称获取对象 * @param beanName * @return */// public static Object getBean(String beanName){// return beans.get(beanName);// }//// /**// * 根据Bean的名称获取bean对象// * @param beanName// * @return public static Object getBean(String beanName){ Object bean = null; try { String beanPath = props.getProperty(beanName);// System.out.println(beanPath); bean = Class.forName(beanPath).newInstance();//每次都会调用默认构造函数创建对象 }catch (Exception e){ e.printStackTrace(); } return bean; }}

经过这个类的创建我们就可以不用new关键字来创建对象了,用工厂类获取service和dao对象的

// 使用工厂类的获取dao,降低程序的耦合性 private IAccountDao accountDao = (IAccountDao)BeanFactory.getBean("accountDao");

= (IAccountService) BeanFactory.getBean("accountService");

总结:就是把三层的对象都使用配置文件配置起来,当启动服务器应用加载的时候, 让一个类中的方法通过读取配置文件,把这些对象创建出来并存起来。在接下来的使用的时候,直接拿过来用就好了。这个类就是工厂BeanFactory

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:@Validated和@Valid三种异常捕获处理方式
下一篇:GET和POST两种基本请求方法的区别
相关文章

 发表评论

暂时没有评论,来抢沙发吧~