java - Spring Java 中许多 DAO 的策略

标签 java spring dao

我们在现有项目中有许多 DAO(目前没有接口(interface),但可以改变)。我们没有为每个 DAO 类连接一个 Spring 管理的 bean 并将它们注入(inject)服务层,而是有一个类似这样的 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 接口(interface)作为服务类的属性 2.) 通过配置将 DAO 实现连接到服务方法中。 (我们有时会在一个服务类中使用多个 DAO)。

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

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

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

有没有更好的方法我想念?介于两者之间?欢迎提出意见。

最佳答案

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

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

@Autowired MyDao myDao;

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

关于java - Spring Java 中许多 DAO 的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13750079/

相关文章:

java - Scala/Java 错误处理 NullPointerException

java - 从Grails应用程序中终止长时间运行的SQL查询

java - 无法使用 ExecutorService 和 Callables 捕获特定异常?

java - Xamarin android 获取联系人地址

java - Spring Cloud DiscoveryClient。 getLocalServiceInstance() 已弃用,如何使用注册?

java - 使用 DAO/servlet 中的表单/参数过滤数据

spring - 将 Spring Batch Admin 集成到现有应用程序中

spring - 每次测试后删除 InProcess Neo4j DB

android - 房间 "Not sure how to convert a Cursor to this method' s 返回类型": which method?

orm - jpa2/eclipselink 合适的 DAO 结构是什么?