博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
@Resource注解
阅读量:6799 次
发布时间:2019-06-26

本文共 1791 字,大约阅读时间需要 5 分钟。

原文地址:

 

@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定义:

顺便提一下,上面的例子中,实际的JDBC连接属性从一个属性文件(properties file)解析而来,在这个属性文件里,关键字与提供的${占位符}互相对应,这需要注册一个名为PropertyPlaceholderConfigurerBeanFactoryPostProcessor实现来完成。这是具体化那些属性(通常是针对特定环境的属性)常用的技术,这些属性可能比其他配置修改得更为频繁。

Srping2.5中新加入了‘context’命名空间,这个命名空间让我们能够得到更为简洁的方式来实现属性占位符(property placeholder)的配置:

转载地址:http://pduwl.baihongyu.com/

你可能感兴趣的文章
查看linux系统常用的命令,Linux查看系统配置常用命令
查看>>
linux下安装7z命令及7z命令的使用
查看>>
检测设备朝向和移动
查看>>
iOS开发网络篇—监测网络状态
查看>>
vs------密钥
查看>>
Cygwin安装时,选择163的源后出错:Unable to get setup.ini from <http://mirrors.163.com/cygwin/>...
查看>>
C# Excel数据有效性
查看>>
java 调用微信截图工具
查看>>
【Hadoop】伪分布式环境搭建、验证
查看>>
李洪强经典面试案例33-如何面试 iOS 工程师
查看>>
[LeetCode] Sum of Left Leaves 左子叶之和
查看>>
【温故而知新-Javascript】使用 Window 对象
查看>>
Nginx location 匹配顺序整理
查看>>
javascript (function() { /* code */ })() 自执行函数
查看>>
MVC数据库数据分页显示
查看>>
CreatarGlobe实现多机立体显示方案(初稿)
查看>>
JAVA设计模式初探之桥接模式
查看>>
拉链表-增量更新方法一
查看>>
有什么样的博客手机客户端
查看>>
听10秒就会喜欢上的歌曲
查看>>