Spring Java中许多DAO的策略

我们在现有项目中有许多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自动装配为bean,但我仍然需要在每个服务类中创建属性来表示正在使用的DAO.在一个大型项目中,我仍然犹豫是否开始自动布线bean – 我们需要为所有开发人员提供可见性.

感觉就像我在一个实体之间紧密耦合,但是更少的代码/配置开销和b.)松散地耦合到接口,但需要大量的代码/配置开销.

有没有更好的方法让我失踪?介于两者之间?意见表示欢迎.

最佳答案
我将所有DAO作为Spring托管组件并将它们注入到松散耦合的服务中.为什么你认为autowiring bean在一个大项目中是坏的.

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

@Autowired
MyDao myDao;

我没有看到它的编码/配置开销.

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...