java如何使用BeanFactory实现service与dao层解耦合
发表于:2024-11-12 作者:千家信息网编辑
千家信息网最后更新 2024年11月12日,小编给大家分享一下java如何使用BeanFactory实现service与dao层解耦合,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起
千家信息网最后更新 2024年11月12日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安全错误
数据库的锁怎样保障安全
模拟通信网络技术
期货外盘交易软件开发
电脑怎么进服务器安装软件
中级软件开发工资
WIFI 网络安全认证证书
服务器压测软件
网络安全知识资料库
服务器空间如何做r
张家港运营网络技术服务费
数据库全备份
数据库书店进货出货管理系统
软件开发机
数据库查询如何进行分库
最新软件开发生命周期
服务器start all
海信电视老是说服务器连接失败
数据库查询为null值
大连埃森哲软件开发干什么
网络安全第五空间观后感500字
浙江生鲜软件开发
网络安全和java后端
公司有软件开发
如何导手机支付宝数据库
数据库char后面的数值是什么
网络安全股排名
数据库安全性的名词解释
广州御途网络技术有
闽教版七年级网络安全与道德
数据库日志文件默认的文件名
DW仓库数据库查询界面