千家信息网

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

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,小编给大家分享一下java如何使用BeanFactory实现service与dao层解耦合,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起
千家信息网最后更新 2025年01月20日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安全错误 数据库的锁怎样保障安全 log4j2输出到数据库 单机私服数据库物品在哪 网络安全防范软件排名 php 操作远程数据库 期货交易系统软件开发公司 查询数据库下面所有的表 和平精英海岛服务器刷新时间 浙江网络技术转让参考价 淘宝客虚拟空间和服务器哪个好 28岁学网络技术学什么好 小米手机刷机以后显示数据库 考试培训软件开发公司 为向互联网科技公司怎么样 沭阳汇龙互联网科技有限公司 数据库中记录型的定义 数据库维护中的快照技术 深圳互联网信息科技有限公司 云服务器跟轻量云服务器区别 上海电商软件开发定制平均价格 创建数据库的基本目标是 军队网络安全龙头 教育系统网络安全通知 网络安全包括那三个 数据库 顺序文件 计算机网络技术应用哪个专业好 申汇互联网科技 上海工程软件开发发展 ibm服务器从u盘启动 山西仟汇网络技术有限公司 爱国科技与互联网
    0