@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上
@Autowired默认按类型装配(这个注解是属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,可以结合@Qualifier注解使用
@Resource装配顺序
- 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
- 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
- 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
- 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配
// 例子
@Resource
private UserService userServiceImpl // 名称必须要为 **Impl
@Resource(name="userServiceImpl")
private UserService userService
@Resource(type = com.lee.service.impl.UserServiceImpl.class)
private UserService userService
@Autowired()
private UserService userService
@Qualifier("userServiceImpl")
private UserService userService