没有合适的资源?快使用搜索试试~ 我知道了~
@BackgroundTaskpublic class FilePoller {@PostConstructpublic void startPolling() {...}@PreDestroypublic void stopPolling() {...}...} @Autowiredprivate MessageSource messageSource; @Autowiredprivate ResourceLoader resourceLoader; @Autowiredprivate ApplicationContext applicationContext;
资源推荐
资源详情
资源评论
简介
从诞生之初, 框架就坚守它的宗旨:简化企业级应用开发,同时给复杂问题提
供强大的、非侵入性解决方案。一年前发布的 就把这些主题推到了一个新的高
度。 的支持和自定义命名空间的使用大大减少了基于 的配置。使用
及更新版本 的开发人员如今可以利用植入了像泛型()和注解等新语
言特性的 库。最近,和 表达式语言的紧密集成,使得以非侵入方式添加
跨越定义良好的 管理对象分组的行为成为可能。
新发布的 继续坚持了这个发展趋向,特别是为那些使用 或更新版
本 的开发人员提供了进一步简化而强大的新特性。这些新特性包括:注解驱动的依赖
性注入(),使用注解而非 元数据来自
动侦测 上的 组件,注解对生命周期方法的支持,一个新的 控制器
模型将请求映射到加注解的方法上,在测试框架中支持 !", 命名空间的
新增内容,等等。
本文是探讨这些新特性的 # 篇系列文章中的第一篇。本文将主要关注于简化的配置和
在 应用程序上下文($)核心新增的基于注解的功能;第二篇
文章将涵盖 层可用的新特性;最后一篇文章将着重介绍集成和测试的新增性能。这一
系列的三篇文章中引用的例子都基于 %& 应用程序范例。此范例最近被重构
以用于展示 最新功能,并被包含于 的发布下载包中,可以从
'(下载网页下载。查看“)*目录下的“$*文件可以
得知关于如何构建和部署 %& 应用程序,掌握本文提到的新技术的最佳方法也许就
是对 %& 应用程序中所展示的特性进行试验。
Spring 支持 JSR-250 注解
++ 中引入了“ 平台的公共注解(&,
%,)”,而且该公共注解从 +- 一开始就被包含其中。- 年 月,.+
系统宣布了他们在一个名为 %,( 的项目上与 /,0 的合作,该项目提供了基
于 的 ++ 编程模型的实现,包括支持用于注入()、拦截(
)和事务处理()的 1 注解和 +.# 注解213。
在 版本中, 框架的核心()现在支持以下 1 注解:
4@ Resource
4@ PostConstruct
4@ PreDestroy
结合 Spring,这些注解在任何开发环境下都可以使用——无论是否有应用程序服务器
——甚至是集成测试环境都可以。激活这样的支持仅仅是注册一个单独的 Spring post-
processor 的事情:
56,($&
.%%6)7
@Resource 注解
@Resource 注解被用来激活一个命名资源(named resource)的依赖注入,在 JavaEE 应
用程序中,该注解被典型地转换为绑定于 JNDI context 中的一个对象。 Spring 确实支持使
用@Resource 通过 JNDI lookup 来解析对象,默认地,拥有与@Resource 注解所提供名字相
匹配的“bean name(bean 名字)”的 Spring 管理对象会被注入。 在下面的例子中,Spring 会
向加了注解的 setter 方法传递 bean 名为“dataSource”的 Spring 管理对象的引用。
81!256!63
! 9!29!
!3:
!5!;
<
直接使用@Resource 注解一个域(field)同样是可能的。通过不暴露 setter 方法,代码
愈发紧凑并且还提供了域不可修改的额外益处。正如下面将要证明的,@Resource 注解甚
至不需要一个显式的字符串值,在没有提供任何值的情况下,域名将被当作默认值。
81!
9!!;))
=!=
该方式被应用到 setter 方法的时候,默认名是从相应的属性衍生出来,换句话说,命
名为'setDataSource'的方法被用来处理名为'dataSource'的属性。
9!!;
81!
! 9!29!
!3:
!5!;
<
当@Resource 没有显式提供名字的时候,如果根据默认名字找不到对应的 Spring 管理
对象,注入机制会回滚至类型匹配(type-match)。如果刚好只有一个 Spring 管理对象符
合该依赖的类型,那么它会被注入。通过设置 CommonAnnotationBeanPostProcessor 的
‘fallbackToDefaultTypeMatch’属性为“false”(默认值是“true”)可以禁用这一特性。
56,($&
.%%67
56, (>9,!>6!56,6)7
正如上文所提到的,在解析标有@Resource 注解的依赖时,Spring 支持 JNDI-lookup。
如若要强制对所有使用@Resource 注解的依赖进行 JNDI lookup,那也只要将
CommonAnnotationBeanPostProcessor 的'alwaysUseJndiLookup' 标识设置为 true 就可以了
(默认值是 false)。
56,($&
.%%67
56?(!6!56!6)7@
另一个选择是,激活指定为‘!,A的依据全局 B9/ 名的查找,在
81! 注解内提供‘BA属性。即使目标对象实际上是一个 B9/ 资源,
仍然推荐引入一个 管理对象,这样可以提供一个间接层并且因此降低耦合程度。
自 开始添加命名空间以来,定义一个委托 处理 B9/(! 的
也变得愈发简练:
这个方法的优点在于间接层带来了巨大的部署弹性。比如说,一个单独的系统测试环
境应该不再需要 JNDI 注册。在这种情况下,在系统测试配置中可以提供如下的 bean 定义:
56!6
56,( !99
!6
C&B56D: &B<6
C!56D: !<6
C!56D: !<6
C56D: <6)7@
顺便提一下,上面的例子中,实际的 JDBC 连接属性从一个属性文件(properties file)
解析而来,在这个属性文件里,关键字与提供的${占位符}互相对应,这需要注册一个名为
PropertyPlaceholderConfigurer 的 BeanFactoryPostProcessor 实现来完成。这是具体化那些属
性(通常是针对特定环境的属性)常用的技术,这些属性可能比其他配置修改得更为频繁。
56,( ,E%%
&E!67
566!56C 6)7@
Srping2.5 中新加入了‘context’命名空间,这个命名空间让我们能够得到更为简洁的方
式来实现属性占位符(property placeholder)的配置:
F$C
56C 6)7
生命周期注解:@PostConstruct 和@PreDestroy
@PostConstruct 和@PreDestroy 注解分别用来触发 Spring 的初始化和销毁回调。这个特
性在原有基础上得到了扩展,但并没有替代在 Spring2.5 之前版本中提供的同样的回调的另
两个选项。第一个选项是实现 Spring 的 InitializingBean 和 DisposableBean 接口中的一个或
两个。这两个接口都需要一个回调方法的实现(分别是 afterPropertiesSet()和 destroy() )。这
种基于接口的方法利用了 Spring 自动识别任何实现这些接口的 Spring 管理对象的能力,因
剩余12页未读,继续阅读
资源评论
wsmai0
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功