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