@Autowired与@Resource (@Inject)的区别

准备数据:

定义接口:

/**
 * 定义一个接口
 * @author lizehao
 * @company 连连支付
 * @date 2019年2月18日下午2:54:03
 */
public interface UserService {

}

实现类

/**
 * 第一个实现类 
 * bean的名称默认是全类名首字母小写 userServiceImpl
 * @author lizehao
 * @company 连连支付
 * @date 2019年2月18日下午2:54:49
 */
@Service
public class UserServiceImpl implements UserService {

}

/**
 * 第二个实现类 
 * bean的名称默认是全类名首字母小写 userServiceImpl2
 * @author lizehao
 * @company 连连支付
 * @date 2019年2月18日下午3:00:29
 */
@Service
public class UserServiceImpl2 implements UserService {

}

Controller:

/**
 * @author lizehao
 * @company 连连支付
 * @date 2019年2月18日下午3:22:10
 */
@Controller
public class UserController {

	/** 
	 * 按类型注入 
	 * 如果一个接口有两个实现类的时候,按类型装配就会报错,需要指定名称
	 * */
	@Autowired
	@Qualifier("userServiceImpl2")
	/** 
	 * 	按名称注入 (按名称找不到匹配的bean,才按照类型装配)
	 * 	如果一个接口有两个实现类的时候,@Resource默认按名称注入,找不到按类型装配,按类型的时候,就会报错,需要指定名称
	 *  如果name属性一旦指定,就只会按照名称进行装配。
	 * */
	@Resource(name = "userServiceImpl")
	private UserService userService;

	@PostConstruct
	public void init() {
		System.out.println("----------" + userService);
	}
}
  • @Autowired与@Resource都可以用来装配bean.
  • @Autowired属于Spring的;@Resource为JSR-250标准的注释,属于J2EE的。 @Inject是JSR330规范实现的,需要导入额外的包

@Autowired

  • 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:
@Autowired
@Qualifier("userServiceImpl")
  • 如果一个接口有两个实现类的时候,按类型装配就会报错,需要指定名称,如上:

@Resource

  • 按名称注入 (按名称找不到匹配的bean,才按照类型装配)
@Resource
private UserService userService;
实质是按类型注入的

@Resource
private UserService userServiceImpl;
按名称注入
  • 如果一个接口有两个实现类的时候,@Resource默认按名称注入,找不到按类型装配,按类型的时候,就会报错,需要指定名称
@Resource(name = "userServiceImpl")
  • 如果name属性一旦指定,就只会按照名称进行装配。

@Autowired和@Inject区别

  • @Autowired和@Inject都是按照类型装配,不同的是@Autowired默认require=true,而@Inject没有这个属性。
  • @Autowired如果需要按照名称匹配需要和@Qualifier一起使用,@Inject和@Name一起使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值