我们在现有项目中有许多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在一个大项目中是坏的.
原文链接:https://www.f2er.com/spring/432553.html只需使用@Component注释每个DAO类
并用.替换MyDao mydao = factory.getmyDao()
@Autowired
MyDao myDao;
我没有看到它的编码/配置开销.