@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注解完成属性装配

前面我们讲过spring的依赖注入有两种方式: 使用构造器注入。 使用属性setter方法注入。 但其实还有一种注入方式,我们没讲,那就是使用Field注入(用于注解方式)。在详细讲解这种方式之前,我...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2016年10月19日 14:03
  • 3874

以@Resource为例,透析注解的本质,spring中是如何使用注解的

在前面,看到自定义注解,并且也简单的使用了一下, 然后就再次用个简单的例子,来看看spring里面是如何使用注解的。如下: 先看Java代码:简单,就是2个bean和一个主方法。 import or...
  • qq_27093465
  • qq_27093465
  • 2016年09月29日 15:54
  • 8491

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

上文我们已经学会使用@Resource注解注入属性。学是学会了,但也仅限于会使用而已,故我们要深入剖析其内部原理,才算真正明白。接下来我们就来编码剖析@Resource注解的实现原理,但这都是建立在用...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2016年10月19日 15:42
  • 1563

Spring项目中无法引入@Resource注解

问题:在Spring项目中引入@Resource注解的时候,有红色下划线错误,而且输入注解的时候不能出现自动代码补全。加入javax.annotation包后,出现警告。 解决办法:Spring项目中...
  • qq_20916555
  • qq_20916555
  • 2017年04月12日 14:26
  • 3399

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

Spring 编码剖析@Resource注解的实现原理 June 15, 2011 | tags 传智播客Spring2.5观看笔记   | views 619 Comments 1 ...
  • lushuaiyin
  • lushuaiyin
  • 2012年04月11日 16:55
  • 1848

Spring Mvc那点事---(8)Spring Mvc @Resource注解

@Resource和@Autowired作用一样,都是做bena注解使用.@Resource有按名称和按类型两种注入方式,默认是按名称进行注入。                按名称注入     ...
  • zx13525079024
  • zx13525079024
  • 2016年05月21日 17:46
  • 2755

spring项目无法引入@Resource注解的问题处理

问题:在spring项目中引入@Resource注解的时候,有红色下划线错误,而且输入注解的时候不能出现自动代码补全。加入javax.annotation包后,出现警告。 解决办法:Spring项目...
  • ytangdigl
  • ytangdigl
  • 2017年09月01日 18:49
  • 1234

Spring框架中@Resource注解报错解决方案

问题:Spring框架中,@Resource注解报错,在书写时没有自动提示 解决:因为maven配置文件的pom.xml文件中缺少javax.annotation的依赖,在pom.项目路中加入依赖即可...
  • weixin_38051694
  • weixin_38051694
  • 2017年08月31日 20:47
  • 438

@Resource 与 @Service注解

Spring中什么时候用@Resource,什么时候用@service 当你需要定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),就相当于讲这个类定义为一个be...
  • u012422446
  • u012422446
  • 2016年07月05日 10:19
  • 5079

@Resource注解的使用

1、在spring的配置文件中导入命名空间          xmlns:context="http://www.springframework.org/schema/context"      ...
  • u011554611
  • u011554611
  • 2015年01月05日 20:17
  • 12761
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:@Resource注解
举报原因:
原因补充:

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