java如何使用BeanFactory实现service与dao层解耦合
发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,小编给大家分享一下java如何使用BeanFactory实现service与dao层解耦合,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起
千家信息网最后更新 2025年02月19日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,返回集合 Listlist = 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安全错误
数据库的锁怎样保障安全
数据库设计表怎么自增
网络技术理论知识考试
微信智能家居需要服务器吗
河南通用软件开发零售价格
计算机应用技术数据库方向
更新服务器配置是什么意思
计算机网络技术如何选择
大数据库技术是什么意思
join在数据库中
共享店铺系统软件开发
沈阳大学毕业论文查重数据库
阿拉丁网络技术好不好
sql数据库无日志不能附加
泰兴环保网络技术
棋牌服务器 js脚本
中学生与网络安全教育教案
一般做软件开发能做到多少岁
网络安全标识解析二级节点
东方智谷小蚂蚁服务器怎么盈利
本机的数据库url地址
网络技术商标第几类
drds数据库表设计
内蒙古通信软件开发过程品质保障
创造与魔法pvp服务器
万得数据库 万德
一个软件开发成功了怎样运行
java编程与软件开发
计算机网络技术科目考试
no kill服务器
网络安全法 释义