当前位置: 首页 > 面试题库 >

DAO和依赖注入,请教?

傅奕
2023-03-14
问题内容

这是我第一次使用DAO模式。从我读到目前为止,实现这种模式将帮助我从任何持久性实现单独我的调用代码(控制器)
-正是我想要的; 也就是说,我不想因为使用任何特定的数据库或第三方库而感到沮丧。

我使用MongoDB提供的BasicDAO类,使用MongoDB和morphia(作为示例)创建一些测试代码(以TDD方式)。

据我所知,扩展BasicDAO<T, V>需要一个接受Morphia和Mongo对象的构造函数。这些是非常具体的(第三方)类型,我真的不想在DAO类本身之外浮动。

我如何拥有更多的可插拔架构?我的意思是,我应该考虑如何重新配置​​我的应用程序以使用具有特定配置参数的特定DAO,而不是实际来源?


问题答案:

“可插拔” DAO层通常/总是基于接口DAO。例如,让我们考虑一个非常通用的简单示例:

public interface GenericDAO <T, K extends Serializable> {  
    List<T> getAll(Class<T> typeClass);   
    T findByKey(Class<T> typeClass, K id);  
    void update(T object);  
    void remove(T object);  
    void insert(T object);  
}

(这是Morphia的通用DAO中的内容)

然后,您可以开发不同的几种通用DAO实现,在其中可以找到不同的字段(反映在构造函数参数,setter和getter等中)。让我们假设一个基于JDBC的:

public class GenericDAOJDBCImpl<T, K extends Serializable> implements GenericDAO<T, K extends Serializable> {
    private String db_url;

    private Connection;
    private PreparedStatement insert;
    // etc.
}

一旦实现了通用DAO(用于具体的数据存储),就可以轻松获得具体的DAO:

public interface PersonDAO extends GenericDAO<Person, Long> {

}

public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl<Person, Long> implements PersonDAO {

}

(顺便说一句,在Morphia的BasicDAO中,您拥有的是MongoDB通用DAO的实现)。



 类似资料:
  • 在React中,想做依赖注入(Dependency Injection)其实相当简单。请看下面这个例子: // Title.jsx export default function Title(props) { return <h1>{ props.title }</h1>; } // Header.jsx import Title from './Title.jsx'; export defa

  • 依赖注入 Dependency Injection is a strong mechanism, which helps us easily manage dependencies of our classes. It is very popular pattern in strongly typed languages like C# and Java. 依赖注入是一个很强大的机制,该机制可以帮

  • 简介 Hyperf 默认采用 hyperf/di 作为框架的依赖注入管理容器,尽管从设计上我们允许您更换其它的依赖注入管理容器,但我们强烈不建议您更换该组件。 hyperf/di 是一个强大的用于管理类的依赖关系并完成自动注入的组件,与传统依赖注入容器的区别在于更符合长生命周期的应用使用、提供了 注解及注解注入 的支持、提供了无比强大的 AOP 面向切面编程 能力,这些能力及易用性作为 Hyper

  • 出自维基百科 Wikipedia: 依赖注入是一种允许我们从硬编码的依赖中解耦出来,从而在运行时或者编译时能够修改的软件设计模式。 这句解释让依赖注入的概念听起来比它实际要复杂很多。依赖注入通过构造注入,函数调用或者属性的设置来提供组件的依赖关系。就是这么简单。

  • 到现在为止,我们使用是硬编码的三条手机记录数据集。现在我们使用AngularJS一个内置服务$http来获取一个更大的手机记录数据集。我们将使用AngularJS的 依赖注入(dependency injection (DI))功能来为PhoneListCtrl控制器提供这个AngularJS服务。 请重置工作目录: git checkout -f step-5 刷新浏览器,你现在应该能看到一个2

  • 容器和依赖注入 5.1版本正式引入了容器的概念,用来更方便的管理类依赖及运行依赖注入。 5.0版本已经支持依赖注入的,依赖注入和容器没有必然关系 容器类的工作由think\Container类完成,但大多数情况我们只需要通过app助手函数即可完成大部分操作。 依赖注入其实本质上是指对类的依赖通过构造器完成自动注入,例如在控制器架构方法和操作方法中一旦对参数进行对象类型约束则会自动触发依赖注入,由于