@Autowired注解是Spring中非常重要且常见的,接下来就简要的介绍一下它的用法。
    @Autowired默认是通过set方法,按照
    
     类型
    
    自动装配JavaBean,set方法可省略不写,它主要是修饰在成员变量上。
   
    
    
    默认按类型装配
   
例如:若要在StudentServiceImp 中注入IStudentDao 的实现类,只需要在StudentServiceImp 中添加@Autowired修饰的IStudentDao 的成员变量即可,注意要结合扫描,否则即使使用了@Autowired注解,在容器中也找不到这个类。
    @Autowired默认的是按照类型进行装配注入,例如下面的这段代码:它的含义就是要在spring容器中找到一个IStudentDao类型的类,此时容器中必须要有一个与之匹配的类型,否则就会报
    
     NoSuchBeanDefinitionException
    
    的异常。
   
public class StudentServiceImp implements IStudentService {
    @Autowired
    private IStudentDao studentDaoImp1;
  }
    
    
    按名称装配
   
此时可能会出现这样的问题:spring容器中同时注入了多个同一类型的类时怎么办?
    这个时候@Autowired会自动切换成按名称装配,它会根据成员变量的名称去容器中查找对应类型且名称匹配的类。 如果根据名称没有找到匹配的类,那麽就会报
    
     NoUniqueBeanDefinitionException
    
    的异常。
   
    例如,同样是上面那段代码,不同的是IStudentDao接口现在有两个实现类如下,此时按照类型显然是不行的,这是就会切换成按名称装配,它会去容器中找IStudentDao类型的,名称为studentDaoImp1的那个类注入。
    
     
   
  @Autowired
    private IStudentDao studentDaoImp1;
    
    
    与@Qualifier 联用,按名称装配
   
如果在不考虑容器中匹配类型的数量是否唯一的情况下,我就是想按照名称装配怎么办?
这个时候可以和@Qualifier 联用,通过@Qualifier注解中的value属性来指定要注入的那个类。
    @Autowired
    @Qualifier(value = "studentDaoImp")
    private IStudentDao dao;
代码所体现的是:要注入的是IStudentDao 类型的名叫studentDaoImp的类,这个之后在确保它存在的前提下,只会存在一个符合条件的类。
    
    
    @Resource
   
@Resource注解等价于@Autowired和@Qualifier 联用的效果,上面那段代码可简化如下,在此就不重复解释了。
//    @Autowired
//    @Qualifier(value = "studentDaoImp")
    @Resource(name = "studentDaoImp")
    private IStudentDao dao;
    
    
    总结
   
- @Autowired可自动装配javaBean
- @Autowired默认按类型装配,此时必须有且只有一个符合条件的
- 当有多个同一类型时,@Autowired切换成按名称装配
- @Autowired和@Qualifier 联用可指定注入类
- @Resource等价于@Autowired和@Qualifier 联用的效果
 
