在Java代码中能够使用 @Resource 或者 @Autowired 注解方式来进行注入。 虽然 @Resource 和 @Autowried 均可以完成依赖注入,可是他们是有区别的java
默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来注入。spring
它有两个属性是比较重要的:ui
若是既不指定 name 属性又不指定 type 属性,Spring这时经过反射机制使用 byName 自动注入策略this
@Resource 的装配顺序spa
默认是按照类型进行装配注入,默认状况下,它要求依赖对象必须存在,若是容许 null 值,能够设置它 required 为false。.net
若是咱们想要按名称进行装配的话,能够添加一个 @Qualifier 注解解决。code
@Autowried @Qualifier("adminDAO") private AdminDAO adminDAO;
@Resource 注解是 J2EE 提供的, 而 @Autowried 是 Spring 提供的,若是想减小对 Spring 的依赖建议使用 @Resource 方法。对象
@Resource 和 @Autowried 均可以加在字段的 setter 方法上。blog
@Autowired是根据类型进行自动装配的。若是当spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;若是Spring上下文中不存在UserDao类型的bean,也会抛出BeanCreationException异常。咱们能够使用@Qualifier配合@Autowired来解决这些问题。以下代码所示:get
①可能存在多个UserDao实例
@Autowired @Qualifier("userServiceImpl") public IUserService userService;
或者
@Autowired public void setUserDao(@Qualifier("userDao") UserDao userDao) { this.userDao = userDao; }
这样Spring会直接找id为userServiceImpl和userDao的bean进行装配,从而解决多个bean形成的异常问题。