@DAO and @Service beans clarification



我有一个基本问题。我已经阅读了一些关于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();
 }

然后使用CCD_ 1提供了DAO的实现。例如:

 @Repository
 public class TeamDAOImpl implements TeamDAO {
        @Autowired
        private SessionFactory sessionFactory;
       //Implementation follows..
 }

然后还有另一个与DAO接口相同的服务接口,如下所示:

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();
 }

以及服务实现:

 @Service
 @Transactional
 public class TeamServiceImpl implements TeamService {
   //HERE IS MY QUESTION
   @Autowired
   private TeamDAO teamDAO;
   //implementation follows
}

在上面我标记为"这是我的问题"的服务实现中,我看到我们只注入了没有TeamDAOImpl类实现的接口TeamDAO。那么,如果我们只注入接口TeamDAO而不注入TeamDAOImpl,那么接口及其实现是如何在服务层中一起注入的呢?

在接口上使用@Autowired时,Spring会搜索其类实现该接口的bean实例。如果它没有找到任何这样的bean,它就会失败。如果它找到多个实现接口的类,它就会失败。有关更多详细信息,请参阅Spring@Autowired文档。

Spring注入TeamDAOImpl,因为当您将其标记为@Repository 时,它会注册为Spring-bean

相关内容

最新更新