SpringResource注解的使用

北京什么医院治疗白癜风比较好 http://www.ykhongye.com/m/

上一节,我们学习了如何使用Qualifier注解,解决Autowired自动装配时的多bean问题,这节我们一起来看下

Resource注解的使用。话不多说,直接上干货。

Resource注解和

Autowired注解类似,都用来声明需要自动装配的bean,区别在于

Autowired是类型驱动的注入,而

Resource是名称驱动的注入,所以前者存在多bean问题,而后者,只要保证bean命名唯一就不会出现多bean的问题。

关于Resource注解,官方描述为,一般用在类属性或者setter方法上声明属性需要自动装配,如果在Resource注解中指定了bean的名称,则Spring会只按注解中的bame属性查找合适对象,然后进行装配。如果注解中没有指定名称,先按类属性的变量名查找,如果还是未找到,则按类型进行查找。下面我们一起来看下这三种情况:

1.Resource中指定name属性:

我们配置一个Person对象,它有一个food属性需要自动装配,这里我们在代码中指定名称为“apple”,我们看下能否装配成功。

publicclassPerson{

Resource(name="apple")

privateApplefood;

Override

publicStringtoString(){

return"Person{"+

"food="+food+

};

}

}

publicclassAppleimplementsFood{

}

beanname="apple"class="model.Apple"/bean

beanid="person"class="model.Person"

publicclassStartUp{

publicstaticvoidmain(String[]args){

ApplicationContextapplicationContext=

newClassPathXmlApplicationContext("applicationContext.xml");

Personperson=(Person)applicationContext.getBean("person");

System.out.println(person.toString());

}

}

我们执行main函数后,控制台输出如下,apple对象被成功的自动装配到person对象中:

2.不指定name属性,按变量名查找进行装配

我们只需要调整xml配置和Person类中的Resource注解的使用即可,代码如下:

publicclassPerson{

Resource

privateApplefood;

Override

publicStringtoString(){

return"Person{"+

"food="+food+

};

}

}

beanname="food"class="model.Apple"/bean

beanid="person"class="model.Person"

此时,我们并没有指定名称,而是让Spring按照我们定义的变量名“food”去查找可以被装配的bean对象,执行main函数后,仍然装配成功:

3.使Resource注解按类型查找进行装配

要实现按类型查找,那我们需要修改xml中对Apple类的实例命名,使得Spring在未指定Resource注解的name属性的前提下,按照变量名也无法找到对应的实例对象进行装配,修改代码如下:

publicclassPerson{

Resource

privateApplefood;

Override

publicStringtoString(){

return"Person{"+

"food="+food+

};

}

}

beanname="bigApple"class="model.Apple"/bean

beanid="person"class="model.Person"

我们执行main方法,依然能够注入成功:

以上即是本节的所有内容,如有错误之处,欢迎留言指正,同时欢迎感兴趣的同学


转载请注明:http://www.jiaju1314.com/lsqy/lsqy/17436.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了