对某个interface,在调用的地方@Autowired,为何不会报错?

问题:

// UserDao.java文件中,UserDao是一个interface而不是一个实例,为何UserConter.java文件中@Autowired不会报错?

1. 项目

netgloo

2. 代码

models/UserDao.java

 @Transactional
public interface UserDao extends CrudRepository<User, Long> {

  /**
   * Return the user having the passed email or null if no user is found.
   * 
   * @param email the user email.
   */
  public User findByEmail(String email);

} // class UserDao

controllers/UserController.java

 @Controller
public class UserController {
...
  // ------------------------
  // PRIVATE FIELDS
  // ------------------------

  @Autowired       // UserDao.java文件中,UserDao是一个interface而不是一个实例,为何这里@Autowired不会报错?
  private UserDao userDao;

}   

虽然它本身是一个interface 但是使用@Autowired 自动注入的是实现这个接口的子类