gpt4 book ai didi

spring - 有什么理由使用接口(interface)(Java EE 或 Spring 和 JPA)

转载 作者:行者123 更新时间:2023-12-03 17:40:06 25 4
gpt4 key购买 nike

大多数 J2EE(Spring 和 JPA)类都是用接口(interface)设计的。 继承除外 ,这有什么技术原因吗?像动态代理或 AOP,我需要更多关于此的技术细节

前任

public interface UserDAO {
void delete();
void update();
void save();
List<User> get();
}

public class UserDAOImpl implements UserDAO {
public void delete(){}
public void update(){}
public void save(){}
public List<User> get(){}
}

最佳答案

有3个主要原因,IMO:

第一个原因:代理。

如果您向 Spring 询问 UserDAO 类型的 bean,它实际上会返回一个封装实际 UserDAOImpl 实例的代理。这允许它划分事务、验证安全授权、日志访问、计算统计等。可以在没有接口(interface)的情况下完成,但是需要字节码操作。

第二个原因:可测试性。

在对使用 UserDAO 的业务服务进行单元测试时,您通常会注入(inject)一个模拟 UserDAO 实现。再一次,当 UserDAO 是一个接口(interface)时,这更容易做到。使用具体类是可能的,但并非总是如此,而且使用接口(interface)仍然更容易

第三个原因:脱钩。

通过使用接口(interface),您可以为客户定义 DAO 的真实合约。当然,它需要一个 setDataSource()具体实现中的方法,但客户并不关心这一点。他们所需要的只是 DAO 提供的一组数据访问方法。通过分离接口(interface)和具体实现,您可以确保客户端不依赖 DAO 的实现细节。

关于spring - 有什么理由使用接口(interface)(Java EE 或 Spring 和 JPA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8894883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com