Java @DAO和@servicebeans澄清
我有一个基本问题。我已经阅读了一些关于spring和hibernate集成的教程,其中大多数都有DAO和服务层,如下所示:Java @DAO和@servicebeans澄清,java,spring,Java,Spring,我有一个基本问题。我已经阅读了一些关于spring和hibernate集成的教程,其中大多数都有DAO和服务层,如下所示: public interface TeamDAO { public void addTeam(Team team); public void updateTeam(Team team); public Team getTeam(int id); public void deleteTeam(int id); public List<Tea
public interface TeamDAO {
public void addTeam(Team team);
public void updateTeam(Team team);
public Team getTeam(int id);
public void deleteTeam(int id);
public List<Team> getTeams();
}
public interface TeamService {
public void addTeam(Team team);
public void updateTeam(Team team);
public Team getTeam(int id);
public void deleteTeam(int id);
public List<Team> getTeams();
}
还有另一个与DAO接口相同的服务接口,如下所示:
public interface TeamDAO {
public void addTeam(Team team);
public void updateTeam(Team team);
public Team getTeam(int id);
public void deleteTeam(int id);
public List<Team> getTeams();
}
public interface TeamService {
public void addTeam(Team team);
public void updateTeam(Team team);
public Team getTeam(int id);
public void deleteTeam(int id);
public List<Team> getTeams();
}
在上面的服务实现中,我标记了“这是我的问题”,我看到我们只注入了接口
TeamDAO
,它没有TeamDAOImpl
类的实现。那么,如果我们只注入接口TeamDAO
,而不是TeamDAOImpl
,那么接口及其实现如何在服务层注入到一起呢?Spring注入TeamDAOImpl,因为当您在接口上使用@Autowired
时,当您将其标记为@Repository时,它会注册为Spring bean,Spring搜索其类实现该接口的bean实例。如果找不到这样的bean,它就会失败。如果找到多个实现该接口的类,则会失败。有关更多详细信息,请参阅。您的问题将在任何有关Spring的教程中介绍。Spring将进行依赖项注入,它将选择接口的实现,并设置带有对象引用的字段。你能发布一个链接到这样一个像样的教程吗?为什么spring会选择接口的实现?是的,但你不是说@Autowired TeamDAOImpl,而是说作为接口的TeamDAO。这又是如何注入实现的呢?在OO中有一个称为“程序到接口”的概念。更多检查:Spring将选择接口的实现并设置对象引用。本教程使用接口句柄(TeamDAO)而不是实际对象引用的原因是,通过这种方式,可以对接口进行不同的实现。用于模拟/单元测试。另外,值得注意的是,Spring可以注入实现的代理,而不是直接实现,以实现AOP功能性,例如每个方法名称的事务管理。