@Autowired @Resource @Value的区别

@Autowired

@Autowired是什么

@Autowired 表示某个属性书否需要进行依赖注入,可以写在属性和方法上。注解中的required属性默认为true,表示如果没有对象可以注入给属性则抛异常

@Autowired赋值过程

1、Autowired加在某个属性上,Spring在进行Bean的生命周期过程中,在属性填充这一步,会基于实例化出来的对象,对该对象中加了Autowired的属性自动给属性赋值
Spring会根据属性的类型去Spring的容器中找出该类型所有的Bean对象,如果找出多个则在根据属性的名字从多个中确定一个,如果required为true并且根据属性信息找不到对象则抛出异常。

2、Autowired加在某个方法上时,Spring在进行Bean生命周期的属性填充阶段,会根据方法的参数类型、参数名字从Spring容器中找到对象当做方法的入参,自动反射调用该方法。

3、Autowired加在构造方法上时,Spring会在推断构造方法阶段选择该构造方法进行实例化,在反射调用构造方法之前,会根据构造方法的参数类型,参数名从Spring容器中找到Bean对象,当做构造方法入参。

@Resource是什么

@Resource和@Autowired 类似,也是用来进行依赖注入的。@Resource是java所提供的注解 ,@Autowired 是Spring提供的,他们依赖注入的底层实现不同

@Resource赋值过程

#Resource注解中有一个name属性,针对name属性是否有值,@Resource依赖注入的底层流程是不同的。
如果name属性有值,那么Spring会直接根据所指定的name值去Spring容器中找Bean对象,如果找到了则成功否者就会抛出异常
如果name属性没有值
1、先判断该属性名字在Spring容器中是否存在Bean对象
2、如果存在,则成功找到Bean对象进行注入
3、如果不存在,则根据属性类型去Spring容器中找Bean对象吗,找到一个则进行注入

@Value是什么

@Value和@Autowired、@Resource类似,也是用来对属性进行注入的,只不过@Value是用来从Properties文件中来获取值的,并且@Value可以解析SpEL(Spring表达式)

例:
1、@Value(“xiaoxiong”)
直接将字符串"xiaoxiong"赋值给属性,如果属性类型不是String,或无法进行类型转换,则报错
2、@Value("$ {xiaoxiong}")
将会把{}中的字符当做key从Properties文件中找出对应的Value赋值给属性如果没有找到则会把"$ {xiaoxiong}“当做普通字符赋值给属性
3、@Value(”#{xiaoxiong}")
会将#{}中的字符串当做Spring表达式进行解析,Spring会把xiaoxiong当做beanName,并从Spring容器中找到对应的Bean,如果找到则进行属性注入,没有找到则报错

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值