Java @DAO和@servicebeans澄清

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

我有一个基本问题。我已经阅读了一些关于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<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功能性,例如每个方法名称的事务管理。