gpt4 book ai didi

java - 服务和 DAO 总是实现接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:51:48 24 4
gpt4 key购买 nike

在我见过的所有 MVC 项目中,“服务”和“DAO”类总是实现它们自己的接口(interface)。但几乎所有时候,我都没有看到使用此接口(interface)有用的情况。

在这些情况下是否有任何理由使用接口(interface)?在“服务”和“DAO”类中不使用接口(interface)可能会产生什么后果?我无法想象任何后果。

最佳答案

Spring 是一个控制反转容器。从某种意义上说,这意味着您使用的类的实现不落在应用程序上,而是落在其配置上。如果你有一个需要 UserRepository 来存储 User 实例的类,它会是这样的

class UserService {
@Autowired
private UserRepository userRepository;
}

interface UserRepository {
List<User> getUsers();
User findUserBySIN(String SIN);
List<User> getUsersInCountry(Long couyntryId);
}

你会为它声明一个 bean

<bean class="com.myapp.UserRepositoryHibernateImpl">
...
</bean>

注意这个 bean 是 UserRepositoryHibernateImpl,它将实现 UserRepository

在世界 future 的某个时刻,Hibernate 项目不再受支持,您确实需要一个仅在 Mybatis 上可用的功能,因此您需要更改实现。因为您的 UserService 类正在使用用接口(interface)类型声明的 UserRepository,所以只有接口(interface)上可见的方法对类是可见的。因此,更改 userRepository 的实际多态类型不会影响客户端代码的其余部分。您需要更改的所有内容(不包括创建新类)是

<bean class="com.myapp.future.UserRepositoryMyBatisImpl">
...
</bean>

并且您的应用程序仍然有效。

关于java - 服务和 DAO 总是实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18477119/

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