我有一个基本问题。我一直在阅读有关spring和hibernate集成的一些教程,其中大多数都有DAO和Service层,如下所示:
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();
}
然后使用SessionFactory
提供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
}
在上面的服务实现中,我标记了&#34;这是我的问题&#34;我看到我们只注入了TeamDAO
类没有实现的接口TeamDAOImpl
。那么如果只注入接口TeamDAO
而不是TeamDAOImpl
,接口及其实现如何在服务层中注入?
答案 0 :(得分:0)
Spring注入TeamDAOImpl,因为当你将它标记为@Repository时,它会被注册为spring bean
答案 1 :(得分:0)
在接口上使用@Autowired
时,Spring会搜索其实现该接口的bean实例。如果它没有找到任何这样的bean,它就会失败。如果它找到多个实现该接口的类,则会失败。有关详细信息,请参阅Spring @Autowired documentation。