我们在现有项目中有许多 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/