Spring IOC三种注解注入Inject、Resource、AutoWired区别与IOC注入过程

Spring三种注解方式的区别:@AutoWired、@Resource、@Inject
1、
  @AutoWired是Spring自带的方式
  @Resource是JSR-250标准,JDK6以上自带,Spring版本要求2.5以上
  @Inject是JSR-303标准,Spring版本3以上。需要导入外部依赖。
2、
  @AutoWired可以用在构造器、方法、属性、参数、注解上面.
  @Resource可以用在方法、属性、类上。
  @Inject可以用在方法、属性、构造器上。
  ps:当用在属性上面注入时,无须为该属性添加setter方法。

3、
  @AutoWired注入可以根据名字/类型,可以设置required属性为false指定找不到相应bean时不抛异常
  @Resource注入与@AutoWired一致。但可以指定name属性来指定beanName,但如果name对应的bean不存在,则会抛出异常,且没有required属性

  @Inject与@AutoWired一致,区别在于@Inject没有required属性

4、

  @Inject:通过AutowiredAnnotationBeanPostProcessor类实现依赖注入
  @Autowired:通过AutowireAnnotationBeanPostProcessor类实现依赖注入
  @Resource:通过CommonAnnotationBeanPostProcessor类实现依赖注入。

5、Spring的IOC注入过程

 在Spring所管理的类里面,在要注入的对象属性或者setter方法加上上面三个任意一个注解或者在xml文件中配置<property>属性,Spring会自动找寻相应的bean然后将bean对象注入到当前对象中去。

 上述步骤可以分解为以下几个步骤,如图所示:


每次调用getBean时并不总是会调用doCreateBean方法,如果要获取的对象是singleton的,会先从工厂里面获取,否则会走这个流程。但无论是singleton还是prototype还是scope为其他类型,都会走一遍这个流程。

具体来看populateBean()方法:

protected void populateBean(String beanName, RootBeanDefinition mbd, BeanWrapper bw) {
	PropertyValues pvs = mbd.getPropertyValues(); //当前bean要注入的属性
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值