当前位置: 首页 > 知识库问答 >
问题:

Dao和服务接口的需求

简意
2023-03-14
public interface StudentDAO {
    public List<Student> getStudents();
    public void addEntry(Student student);
    public void updateEntry(Student student);
    public void deleteEntry(Student student);
    public Student getStudentById(int id);
}
public interface StudentService {
    public List<Student> getStudents();
    public void addEntry(Student student);
    public void updateEntry(Student student);
    public void deleteEntry(Student student);
    public Student getStudentById(int id);
}

并且有这些接口的实现。

我的问题是为什么我们需要接口而不是直接实现类?

共有1个答案

卜瀚漠
2023-03-14

我很高兴看到有人质疑这种做法。

Spring框架很久以前就引入了为其托管服务/DAO bean定义接口的模式。我认为这种做法是由于他们用于创建动态代理的技术的限制而引入的。

当定义Spring管理的bean时,框架将创建底层实例的代理,目的是使用AOP技术用交叉功能装饰它。显然,在Spring Famework的早期版本中,他们用来实现这些代理的工具需要一个接口来创建代理。

 类似资料:
  • 在我的示例中,我有一个Hibernate实体和一个DAO。 当我以这种方式使用DAO时 数据库中只保存了一行(Action2)。当我删除注释时,两行(Action1和Action2)都被保存(这是我需要的行为)。我的问题是服务层上的事务注释如何影响事务(方法executeTransaction())的执行。为什么没有服务层上的事务性注释,这两行都保存在数据库中,而只有最后一行与此注释一起保存?

  • 问题内容: 我目前正在使用带有Spring插件和hibernate的Struts2开发一个Web应用程序,并且在查看在线示例时,我看到了Service和DAO层的使用,现在才知道Service和数据访问对象层的真正用途是什么?如果服务层只是在调用DAO层的方法来执行CRUD操作。直接调用DAO层方法不明智吗? 假设此示例为Dao和Service Layer 人员服务 人道 我的问题是,如果仅将服务

  • 单点登录 获取从第三方单点登录连接 $app->provider->getLoginUrl(string $redirectUri = '', string $userType = 'admin', string $state = ''); //$redirectUri 回调地址 $userType支持登录的类型 获取登录用户信息 $app->provider->getLoginInfo(st

  • 单靠它是行不通的,因为我认为会调用方法,所以DAO不是由Spring管理的。下面的方法确实起作用,但是如果我必须将上下文配置复制并粘贴到每个方法中,那么看起来会很混乱 这段代码在我的服务类中。有没有更优雅的方法来确保我的DAO被正确初始化,而不是复制和粘贴那个方法的前4行到每个服务方法中?

  • 传统关系型数据库定义了四种数据操作: 插入 Insert 删除 Delete 更新 Update 查询 Query 可以说,这四种操作涵盖了所有的数据操作。并且,除了 插入 操作,所有的操作都是可以一次针对多条记录的。 但是,Nutz.Dao 认为从使用者的角度来看,这四种操作还是有所不同的。比如,查询返回的结果,很多时候仅仅是一条记录。 我们需要为这种情况进行优化。所以,Nutz.Dao 在传统

  • 我正在使用JUnit测试一个DAO类,我得到了一个nullpointerexception,我不知道为什么要启动服务类。以下是测试类: 以下是UserDaoImpl 如何在测试类中注入类?我想nullpointerxeception的原因是dao类没有正确地注入到测试类中