我们现有的项目中有许多 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(使用前将#替换为@)