@Resource注解

原创 2017年08月06日 17:45:53

之所以谈论@Resource注解,是因控制反转(IOC)引申而来,控制反转之所以叫控制反转,就是把对象的创建权赋予Spring容器,本来是程序猿New 对象,改为由Spring 注入对象。当然 注入什么? 注入到哪里?这些你得告诉Spring 。由此显出了@Resource的作用。
@Resource 注解被用来激活一个命名资源(named resource)的依赖注入,在JavaEE应用程序中,该注解被典型地转换为绑定于JNDI context中的一个对象。 Spring确实支持使用@Resource通过JNDI lookup来解析对象,默认地,拥有与@Resource注解所提供名字相匹配的“bean name(bean名字)”的Spring管理对象会被注入。 在下面的例子中,Spring会向加了注解的setter方法传递bean名为“dataSource”的Spring管理对象的引用。
@Resource(name=”dataSource”)
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
直接使用@Resource注解一个域(field)同样是可能的。通过不暴露setter方法,代码愈发紧凑并且还提供了域不可修改的额外益处。正如下面将要证明的,@Resource注解甚至不需要一个显式的字符串值,在没有提供任何值的情况下,域名将被当作默认值。
@Resource
private DataSource dataSource; // inject the bean named ‘dataSource’
该方式被应用到setter方法的时候,默认名是从相应的属性衍生出来,换句话说,命名为’setDataSource’的方法被用来处理名为’dataSource’的属性。
private DataSource dataSource;
@Resource
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
当@Resource没有显式提供名字的时候,如果根据默认名字找不到对应的Spring管理对象,注入机制会回滚至类型匹配(type-match)。如果刚好只有一个Spring管理对象符合该依赖的类型,那么它会被注入。通过设置CommonAnnotationBeanPostProcessor 的‘fallbackToDefaultTypeMatch’属性为“false”(默认值是“true”)可以禁用这一特性。



正如上文所提到的,在解析标有@Resource注解的依赖时,Spring支持JNDI-lookup。如若要强制对所有使用@Resource注解的依赖进行JNDI lookup,那也只要将CommonAnnotationBeanPostProcessor的’alwaysUseJndiLookup’ 标识设置为true就可以了(默认值是false)。



另一个选择是,激活指定为‘resource-ref-mappings’的依据全局JNDI名的查找,在@Resource注解内提供‘mappedName’属性。即使目标对象实际上是一个JNDI资源,仍然推荐引入一个Spring管理对象,这样可以提供一个间接层并且因此降低耦合程度。自Spring2.0开始添加命名空间以来,定义一个委托Spring处理JNDI lookup的bean也变得愈发简练:

这个方法的优点在于间接层带来了巨大的部署弹性。比如说,一个单独的系统测试环境应该不再需要JNDI注册。在这种情况下,在系统测试配置中可以提供如下的bean定义:

版权声明:本文为博主原创,转载请注明出处(http://blog.csdn.net/jdjh1024).

编码剖析@Resource注解的实现原理

  • 2016年10月19日 15:59
  • 3.75MB
  • 下载

用@Resource注解完成属性装配

  • 2016年10月19日 15:01
  • 3.75MB
  • 下载

关于spring的@resource注解的字段注入和setter注入的区别

请问字段注入的时候 1 @resource private IUserDao userDao; //请问如果我这样写了之后,是不是不用写相对应的setter getter方法了? 2 private...
  • FYBH_2k
  • FYBH_2k
  • 2015年10月24日 20:11
  • 2440

注解 @Resource 【转】

在java代码中使用@Autowired或@Resource注解方式进行装配,这两个注解的区别是:@Autowired默认按类型装配,@Resource默认按名称装配,当找不到与名称匹配的bean才会...
  • ssyan
  • ssyan
  • 2011年09月13日 16:14
  • 9526

关于@Autowired和@Resource注解的区别

spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。   @Res...
  • lulu147
  • lulu147
  • 2016年12月19日 16:17
  • 181

@Autowired或@Resource注解

在java代码中使用@Autowired或@Resource注解方式进行装配,这两个注解的区别是:@Autowired 默认按类型装配,@Resource默认按名称装配,当找不到与名称匹配的bean才...

spring---注解@Resource和@Autowired

我不生产代码,我只是代码的搬运工。谢谢。 转载自http://www.cnblogs.com/AloneSword/p/3370462.html spring2.5...

Spring注解@Autowired与@Resource的区别

1、@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。  2、@Autowired默认按类型装配(这个注解是属业spring的),默认情况下...

Spring 注解 javax.annotation.Resource和@Autowired

@Resource和@Autowired两者都是做bean的注入使用。 其实@Resource并不是Spring的注解,他的包是javax.annotation.Resource 需要导入。但是...

@Resource注解

原文地址:@Resource注解作者:玄影镜心@Resource 注解被用来激活一个命名资源(named resource)的依赖注入,在JavaEE应用程序中,该注解被典型地转换为绑定于JNDI c...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:@Resource注解
举报原因:
原因补充:

(最多只允许输入30个字)