@DAO和@Service bean澄清

时间:2015-03-01 21:19:10

标签: java spring

我有一个基本问题。我一直在阅读有关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,接口及其实现如何在服务层中注入?

2 个答案:

答案 0 :(得分:0)

Spring注入TeamDAOImpl,因为当你将它标记为@Repository时,它会被注册为spring bean

答案 1 :(得分:0)

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