Spring Java 中许多 DAO 的策略

2024-04-16

我们现有的项目中有许多 DAO(目前没有接口,但这可能会改变)。我们没有为每个 DAO 类连接一个 Spring 管理的 bean 并将它们注入到服务层,而是有一个类似这样的 DAO“工厂”:

public class DAOFactory {
private static DAOFactory daoFac;

static{
    daoFac = new DAOFactory();
}

private DAOFactory(){}

public static DAOFactory getInstance(){
    return daoFac;
}

public MyDAO1 getMyDAO1(){
    return new MyDAO1();
}

    public MyDAO2 getMyDAO2(){
    return new MyDAO2();
}
    ...

(请注意,MyDAO1 和 MyDAO2 是具体类)

这使我们能够轻松地在服务层中添加/调用 DAO 方法,而不必 1.) 将 DAO 接口作为属性添加到服务类 2.) 通过配置将 DAO 实现连接到服务方法中。 (我们有时会在一个服务类中使用多个 DAO)。

DAOFactory.getInstance().getMyDAO1().doSomething();

到目前为止,这个策略对我们来说很有效(我们没有太多切换实现的需要),但我想知道如果我们能够开始新的方法,是否有更好的方法?我研究了将 DAO 自动装配为 beans,但我仍然需要在每个服务类中创建属性来表示正在使用的那些 DAO。在一个大型项目中,我对是否开始自动装配 bean 犹豫不决 - 我们需要为所有开发人员提供可见性。

感觉就像我在 a.) 与实现紧密耦合,但代码/配置开销较少和 b.) 与接口松散耦合,但需要大量代码/配置开销之间摇摆不定。

我失踪了还有更好的方法吗?介于两者之间的东西?欢迎提出意见。


我将所有 DAO 作为 Spring 管理的组件,并将它们注入到服务中以实现松散耦合。为什么你认为自动装配 bean 在大项目中不好?

只需用@Component注释每个DAO类 并替换MyDao mydao = factory.getmyDao() with

@Autowired MyDao myDao;

我没有看到太多的编码/配置开销。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Java 中许多 DAO 的策略 的相关文章

  • Java中printf左对齐

    当我运行该程序时 阶乘值右对齐 有没有办法让它左对齐 同时保持中间 50 个空格 public class Exercise 5 13 public static void main String args int numbers 1 2
  • 具有多字符替换的字符串组合(产生返回Java的替代重写)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 还有另一篇 Stack Overflow 帖子是为与车辆登记号相关的算法创建的 根据输入的车牌 例如ABC123 和列表 替换值 例如
  • Spring MVC 配置启用

    我正在从头开始建立一个项目 目前我正在配置Spring MVC 4 1 5使用java配置 整个应用程序正在 tomcat gradle 插件上运行 有人可以解释一下为什么我需要对班级进行以下调用DefaultServletHandlerC
  • java中数字字符串间隔排序

    我正在与一些人一起上一个人课 其中有姓名 年龄范围等详细信息 年龄区间为 0 5 6 10 11 30 31 45 46 50 50 100 100 110 我正在上 Person 课name ageBand字符串间隔及其参数化构造函数 g
  • 如何在同一个项目中连接两个数据库MySQL和MongoDB?是否可以?

    目前我正在使用 Hibernate MySQL 和 Spring 配置对我来说运行良好 但是一旦我配置了另一个配置 mongo config xml 文件并尝试使用 mongodb 运行测试用例 它就显示创建名为 的 bean 时出错从第一
  • WAR 文件在 Tomcat 服务器中抛出 OutOfMemoryError

    我有一个 Spring MVC WAR 文件 可以在我的本地计算机 程序和网站 中完美运行 一旦我将文件上传到服务器 aTomcat 7 并尝试访问它 catalina 日志文件表明java lang OutOfMemoryError 我尝
  • 从相对路径读取文件

    我知道这个问题之前已经被问过 1000 次了 我确实尝试了所有解决方案 Java项目中如何从相对路径读取文件 java io File 找不到指定的路径 https stackoverflow com questions 3844307 h
  • TestNG 与 DataProvider 并行执行

    我有一个从数据提供者接收数据的测试 我希望此测试与数据提供者的不同值并行运行 我尝试了这样的方法 public class IndependentTest Test dataProvider dp1 threadPoolSize 3 inv
  • 尽管设置为 1.7,IntelliJ IDEA 13 仍使用 Java 1.5

    尽管在所有项目设置中指定了 JDK 1 7 包括File gt Project Structure gt Project Project SDK 则产生以下错误IntelliJ 13当尝试编译一些使用菱形运算符的简单 Java 7 代码时
  • 将 LinkedHashset 内容复制到新的 ArrayList?

    我有一个最初包含一些内容的 listView 如果它得到相同的内容 我通过删除重复linkedhashset 现在 我想复制linkedhashset内容 即没有重复的内容到新的ArrayList 我尝试复制通过 p addAll 0 lh
  • 有人使用 Hibernate 使用 Elasticache 作为二级缓存吗?

    我发现一些线程说这是可行的 但没有找到具体的说明或配置信息 我也想从 Beanstalk 执行此操作 应用程序应该部署到 beanstalk 并使用将 hibernate 指向 elasticache 实例的配置 是的 我们能够使用二级缓存
  • Java如何处理IF语句和效率

    我只是好奇 Java 实际是如何工作的if声明 注意 当我在下面说 组件 时 我指的是语句检查的各个部分 例如a b c 哪个在计算方面更有效 if a b c do stuff or if a if b if c do stuff 我之所
  • 使用 JSeperator - Java 时出现异常间隙

    我一直在开发 Swing GUI 并在添加后出现一些不寻常和不需要的间隙JSeperator 知道如何删除它们吗 或者任何其他选择来很好地实现这一目标 视觉描述 之前差距就很明显了JLabel 速度 及之后JSlider 相关代码 cont
  • 如何反序列化数组 google-gson 内的数组

    我有这样的 JSON Answers Locale Ru Name Name1 Locale En Name Name2 Locale Ru Name Name3 Locale En Name Name4 正如你所看到的 我的数组里面有数组
  • FileNotFoundException(系统找不到指定的路径)

    我得到这个例外 java io FileNotFoundException C filename xml The system cannot find the path specified 使用此代码 FileWriter fileWrit
  • 如何处理MaxUploadSizeExceededException

    MaxUploadSizeExceededException当我上传的文件大小超过允许的最大值时 会出现异常 我想在出现此异常时显示错误消息 如验证错误消息 我该如何处理这个异常 以便在 Spring 3 中执行类似的操作 Thanks 这
  • 返回数据集的 kSoap 和 .Net Web 服务

    我知道使用数据集是一个很大的罪恶 但由于该服务不在我的控制之下 并且创建代理服务的前景是不可能的 我想看看是否有人创建了可以使用 kSoap 序列化器反序列化的类结构 或者我是否吸错了东西 同时要启动它 看看是否可行 以下是预期的结果数据
  • 缓冲区溢出(与)缓冲区溢出(与)堆栈溢出[重复]

    这个问题在这里已经有答案了 可能的重复 堆栈溢出和缓冲区溢出有什么区别 https stackoverflow com questions 1120575 what is the difference between a stack ove
  • Oracle 的商业 Hotspot JVM 相对于 OpenJDK 有哪些性能优势?

    正如这个问题中所描述的 OpenJDK 与 Java HotspotVM https stackoverflow com q 44335605 1593077 Oracle 的商业 Hotspot JVM 本质上是 OpenJDK 加上一些
  • 像 Java 一样覆盖 Objective-C 类中的方法

    我经常使用此语句来扩展类 而不需要编写整个单独的文件 假设 ClassFromFramework 是库中包含的框架的一部分的类 public ClassFromFramework public String myMethod operati

随机推荐

  • 我应该将“orderby group.key”放在这个 LINQ 语句中的什么位置?

    这段代码 string words car boy apple bill crow brown var groups from w in words group w by w 0 into g select new FirstLetter
  • 如何区分刷新触发的Unload事件还是窗口关闭触发的Unload事件?

    刷新操作和窗口关闭操作都可以触发卸载事件 有没有办法区分实际触发它的操作 在我的情况下 我想忽略刷新操作 您能给我一些解决办法吗 我注意到已经有这种question https stackoverflow com questions 568
  • 在 WinForm 上禁用最小化和最大化?

    WinForms 在右上角有三个框 分别用于最小化 最大化和关闭窗体 我想要做的是删除最小化和最大化 同时保持关闭 我还想使关闭最小化表单而不是关闭它 如何才能做到这一点 The Form有两个属性称为MinimizeBox and Max
  • 如何检查何时为特定 dag 安排了下一次 Airflow DAG 运行?

    我已设置气流并运行一些 DAG 安排每天一次 0 0 我想检查下次计划运行特定 dag 的时间 但我看不到可以在管理员中执行此操作的位置 如果你愿意 你可以使用Airflow s CLI 有next execution option htt
  • 如何在 gcc 内联汇编中声明和初始化局部变量而不使用扩展内联 asm?

    我知道这是一个非常基本的问题 但我真的很困惑 事实上我绝对是 GCC 语法的新手 我想要拥有局部变量 带有标签的堆栈地址 而不使用扩展内联汇编 类似 Intel 语法中的以下代码 DATA1 DB 100 MOV AL DATA1 我猜这是
  • MySQL / 经典 ASP - 参数化查询

    在绝对紧急的情况下 我正在尝试浏览我的网站并添加参数化查询 我是新手 刚刚了解它们 我的问题是 我对连接类型知之甚少 并且我看到的所有示例都使用另一种连接方法 这让我感到困惑 我并不是特别想改变连接到数据库的方式 因为它位于很多页面上 我只
  • 如何使用 C# 从 Excel 工作表中删除 VB 代码?

    有谁知道怎么删除all使用 C 的 VB 代码形成 Excel 工作簿 这段代码不起作用 它删除第一个 最后一个 VBComponent 但在第二个VBComponent上引发ArgumentException VBProject proj
  • 形成 Mockito“语法”

    Mockito 看起来像是一个非常可爱的 Java 存根 模拟框架 唯一的问题是我找不到任何关于使用他们的 API 的最佳方法的具体文档 测试中常用的方法包括 doXXX Stubber when T OngoingStubbing the
  • 如何绘制 UIBezierPath

    这就是我想做的 我有一个 UIBezierPath 我想将它传递给某种方法来绘制它 或者简单地从创建它的方法中提取它 我不确定如何指示应在哪个视图中绘制它 所有绘图方法都必须以 void drawRect CGRect rect 我可不可以
  • Visual Studio 2017 无法修改 - 需要重新启动

    我已经尝试更新和修改 Visual Studio 2017 两天了 但每次运行 Visual Studio 安装程序时 我都会收到以下消息 需要重新启动 如果需要 任何剩余的设置都将恢复 重启后 显然我重新启动了大约10次 知道我必须删除什
  • 外部 jQuery 根本不执行

    下面的代码放在里面时完全可以工作运行页面上的标签 我后来把代码移到了外面 js用于组织目的的文件导致代码停止工作 当应触发某些事件时没有任何反应 我确保脚本包含在给定页面上 此外 我通过 查看源 确保链接有效 当我单击脚本的路径时 脚本会在
  • Pycharm 在移动现有虚拟环境或删除并创建新虚拟环境后忽略新虚拟环境

    如果我在创建项目时允许PyCharm创建虚拟环境 则删除或移动venv文件夹 它不会让我选择一个新文件夹 我可以进入设置中的 Python 解释器菜单 然后选择我自己创建的现有解释器 注意 brokenInterpreter oldFold
  • 在 VBS 中使用环境变量的值时出现问题

    我是 VBScript 新手 编写了一个可以修改 XML 文件的小脚本 但我在将计算机名称放入 XML 时遇到问题 我从以下位置获取了计算机名称HOST使用这些行的环境变量 Set wshShell CreateObject WScript
  • DEP0800:升级到 VS 2015 Update 3 后无法部署 UWP 应用

    升级到 VS 2015 Update 3 后 我很难让我的 UWP 应用程序在调试模式下部署 2 gt 检查是否安装了所需的框架 2 gt 框架 Microsoft VCLibs 140 00 Debug x86 当前未安装应用程序包版本1
  • getline 跳过第一个输入字符 c++ [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 所以我制作
  • awk 中的提示和技巧 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 Scanner 只接受有效的 int 作为输入

    我正在努力使一个小程序更加健壮 我需要一些帮助 Scanner kb new Scanner System in int num1 int num2 0 System out print Enter number 1 num1 kb nex
  • 如何将视图作为图像保存到 SD 卡

    我的应用程序使用表格布局 表格行和文本视图创建一个拼图网格 我希望用户能够将该网格保存到 SD 卡上 以便可以打印 复制或加载到其他设备上 如何保存视图 以便在打印时它看起来就像在 Android 屏幕上一样 None
  • JNLP 作为 HTML 页面中的 Applet

    我试图在 HTML 页面中运行 JNLP 但 java 插件不运行 JNLP 只运行 Applet 这是我的代码
  • Spring Java 中许多 DAO 的策略

    我们现有的项目中有许多 DAO 目前没有接口 但这可能会改变 我们没有为每个 DAO 类连接一个 Spring 管理的 bean 并将它们注入到服务层 而是有一个类似这样的 DAO 工厂 public class DAOFactory pr