千家信息网

java如何使用BeanFactory实现service与dao层解耦合

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下java如何使用BeanFactory实现service与dao层解耦合,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起
千家信息网最后更新 2026年11月03日java如何使用BeanFactory实现service与dao层解耦合

小编给大家分享一下java如何使用BeanFactory实现service与dao层解耦合,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    BeanFactory实现service与dao层解耦合

    在实际网站开发过程中,在service会new一个dao从而调用该dao中的方法,如下代码,但是一旦更换数据库需要改变dao的指向,此时就需要重新部署新的项目

    UserDao UserDao=new UserDaoImpl();

    在本文中使用BeanFactory的方式,在xml中配置dao的指向,一旦发生变化,无需重新部署,只需要改变xml中的配置即可,代码如下:

    UserDao UserDao=(UserDao)BeanFactory.createObject("UserDao");

    全部实现代码如下,请重点关注解耦思想,即关注BeanFactory中的实现

    整体的实现思路是

    UserServiceImp调用BeanFactory中的createObject("UserDao")方法----》在BeanFactory中解析xml文件,获取xml中id与UserDao相同的节点,并获取该节点上的class文件----》利用反射机制创建对象并返回。

    UserServiceImp.java

    package cn.itcast.store.service.serviceImp; import java.sql.SQLException; import cn.itcast.store.dao.UserDao;import cn.itcast.store.dao.daoImp.UserDaoImp;import cn.itcast.store.domain.User;import cn.itcast.store.service.UserService;import cn.itcast.store.utils.BeanFactory; public class UserServiceImp implements UserService { UserDao UserDao=(UserDao)BeanFactory.createObject("UserDao");   @Override public void userRegist(User user) throws SQLException {  //实现注册功能    UserDao.userRegist(user);   }  @Override public boolean userActive(String code) throws SQLException {  //实现注册功能    ///对DB发送select * from user where code=?  User user=UserDao.userActive(code);    if(null!=user){   //可以根据激活码查询到一个用户   //修改用户的状态,清除激活码   user.setState(1);   user.setCode(null);   //对数据库执行一次真实的更新操作  update user set state=1 , code=null where uid=?   //update user set username=? , password=? ,name =? ,email=?, telephone =? ,birthday =? ,sex=? ,state=? ,code= ? where uid=?   UserDao.updateUser(user);   return  true;  }else{   //不可以根据激活码查询到一个用户   return false;  } }  @Override public User userLogin(User user) throws SQLException {  //此处:可以利用异常在模块之间传递数据       //select * from user where username=? and password=?  User uu=UserDao.userLogin(user);  if(null==uu){   throw new RuntimeException("密码有误!");  }else if(uu.getState()==0){   throw new RuntimeException("用户未激活!");  }else{   return uu;  } } }

    BeanFactory.java

    package cn.itcast.store.utils; import java.io.InputStream;import java.sql.SQLException;import java.util.List; import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader; import cn.itcast.store.dao.UserDao;import cn.itcast.store.domain.User; public class BeanFactory {   //解析XML public static Object createObject(String name) {  try {   //通过传递过来的name获取application.xml中name对应的class值      //获取到Document对象   SAXReader reader=new SAXReader();   //如果获取application.xml文件的输入流 (application.xml必须位于src下)   InputStream is=BeanFactory.class.getClassLoader().getResourceAsStream("application.xml");   Document doc=reader.read(is);   //通过Document对象获取根节点  beans   Element rootElement = doc.getRootElement();   //通过根节点获取到根节点下所有的子节点 bean,返回集合   List list = rootElement.elements();   //遍历集合,判断每个元素上的id的值是否和当前的name一致   for (Element ele : list) {    //ele相当于beans节点下的每个bean    //获取到当前节点的id属性值    //如果一致,获取到当前元素上class属性值    String id=ele.attributeValue("id");    if(id.equals(name)){     String str=ele.attributeValue("class");     //通过反射创建对象并且返回     Class clazz=Class.forName(str);     //利用class值通过反射创建对象返回     return  clazz.newInstance();         }   }  } catch (Exception e) {   e.printStackTrace();  }  return null; }  public static void main(String[] args) throws SQLException {  UserDao ud=(UserDao)BeanFactory.createObject("UserDao");  User user=new User();  user.setUsername("aaa");  user.setPassword("aaa");  User uu = ud.userLogin(user);  System.out.println(uu); } }

    application.xml

             

    DAO层实现类CreatFactory.java

    public class CreatFactory { //单例模式  private static SqlSessionFactory factory=null; public static SqlSessionFactory creatFactory(){  if(factory==null){   //加载配置文件   String resource = "mybatis/config.xml";//配置文件地址   //读取文件resource,变成字符流   Reader reader;   try {    reader = Resources.getResourceAsReader(resource);    //将字符流,相当于Connection    factory= new SqlSessionFactoryBuilder().build(reader);   } catch (IOException e) {    e.printStackTrace();   }  }  return factory; }}

    以上是"java如何使用BeanFactory实现service与dao层解耦合"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

    节点 文件 对象 解耦 激活 用户 配置 代码 数据 篇文章 反射 一致 元素 内容 功能 字符 属性 指向 数据库 方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网的科技 互联网科技公司税收优惠 互联网巨头科技公司 互联网科技金融 安徽鑫晟辉互联网科技 智慧科技互联网 深圳天众互联网科技公司 上海亿帐通互联网科技 浙江互联网科技研学营 辽宁互联网新科技 互联网金融科技展 乌鲁木齐新华智原互联网科技学校 徐州市互联网科技有限公司 美国互联网科技实力 山东星卡互联网科技有限公司官网 卡尔迅互联网科技有限公司 济南小医互联网科技有限公司招聘 广州梦谷互联网科技有限公司领导 长沙渺峰互联网科技有限公司 河南商务圈互联网科技有限公司 万易互联网科技 紫鲸互联网科技 深圳国际航运科技和互联网 科技互联网的估值 中国科技互联网公司收入 卓翼科技产业互联网合作 互联网方面的科技前沿 伍佰万互联网科技怎么赚钱 城市宝互联网科技有限公司 广西泛欧互联网科技有限公司
    0