当前位置:   article > 正文

Spring依赖注入—@Resource注解使用_@resource 的name是怎么取的

@resource 的name是怎么取的

1.@Autowired默认按类型装配(这个注解是属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下: 

  1. @Autowired()
  2. @Qualifier("baseDao")
  3. private BaseDao baseDao;
 
2.@Resource(这个注解属于J2EE的),分为以下几种情况
  1)默认安照名称进行装配,名称可以通过name属性进行指定 
  如:
  1. 1 @Resource(name="student") //这里的student是指bean的ID
  2. 2 private Student student;
  2)如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找
   如:
  1. @Resource()       //未指定name,默认取将要注入属性的字段名,如下Student是类类型,student是属性名也就是字段名
  2. private Student student;
  
  3)如果注解写在setter方法上默认取属性名进行装配。
  如:
  1. @Resource(name="student")
  2. public void setStudent(Student student) {
  3. this.student = student;
  4. }
   4)当找不到与名称匹配的bean时才按照类型进行装配。
   如:
  java代码如下:
  1. @Resource()
  2. private Student student;

  spring.xml如下:

  1. <bean id="student1" class="com.spring.chapter8.Student">
  2. <property name="name" value="张三"></property>
  3. <property name="age" value="23"></property>
  4. </bean>

在Spring.xml文件中并没有student  的bean。当找不到与名称匹配的bean时才按照类型进行装配。我们运行也会成功。

 

但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。否则会报错


运行结果如下:
spring.xml如下:

 java代码如下:

运行结果:

 
 
总结:
  1.@Resource注解既可以用在setter中也可以用在属性当中,当Resource指定属性name名字时,就只会按照指定的name去查找bean,否则会报错。

  2.当注解写在字段上时,@Resource不指定name,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。如果最后都找不到与名称匹配的bean时才按照类型进行装配。我们运行也会成功        
   3.推荐使用:@Resource注解在字段上,且这个注解是属于J2EE的,减少了与spring的耦合。最重要的这样代码看起就比较优雅。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/125632
推荐阅读
相关标签
  

闽ICP备14008679号