Spring 2.1 中基于注解的依赖注入
Spring 2.0 引入了注解支持和注解感知的配置选项,使用 Java 5(或更高版本)进行开发的 Spring 用户可以利用这些选项。
@Transactional | 用于划分和配置事务定义 |
---|---|
@Aspect (AspectJ) | 用于定义方面以及 @Pointcut 定义和建议 (@Before, @After, @Around) |
@Repository | 用于指示充当存储库(也称为数据访问对象或 DAO)的类 |
@Required | 用于强制为带注解的 bean 属性提供值 |
在 Spring 2.1 中,基于注解的配置主题得到了显著扩展,并且随着我们向 RC1 版本的推进将继续发展。事实上,现在可以通过注解来驱动 Spring 的依赖注入。此外,Spring 可以_发现_应用程序上下文内需要配置的 bean。
此博客文章将作为对 10 个易于遵循的步骤中的基本功能的教程式介绍。我将在本周晚些时候继续介绍一些更高级的功能和自定义选项。如果您对替代配置选项感兴趣,您还应该查看 Spring Java 配置 项目和 此博客。
本教程至少需要 Java 5,建议使用 Java 6(否则步骤 1 结尾处有一个单独的要求)。
步骤 1
获取 spring-framework-2.1-m1-with-dependencies.zip。解压存档后,您将在“dist”目录中找到 spring.jar 和 spring-mock.jar。将它们添加到您的 CLASSPATH 以及以下文件(显示的路径相对于解压的 2.1-m1 存档的“lib”目录):
- asm/asm-2.2.3.jar
- asm/asm-commons-2.2.3.jar
- aspectj/aspectjweaver.jar
- hsqldb/hsqldb.jar
- jakarta-commons/commons-logging.jar
- log4j/log4j-1.2.14.jar
步骤 2
提供示例的接口和类。我尽量使其保持简单,但能够演示主要功能。我将所有代码和配置包含在一个名为“blog”的包中。我建议遵循相同的准则,以便示例按原样工作;否则,请务必进行必要的修改。首先是_GreetingService_接口
public interface GreetingService {
String greet(String name);
}
然后,一个简单的实现
public class GreetingServiceImpl implements GreetingService {
private MessageRepository messageRepository;
public void setMessageRepository(MessageRepository messageRepository) {
this.messageRepository = messageRepository;
}
public String greet(String name) {
Locale locale = Locale.getDefault();
String message = messageRepository.getMessage(locale.getDisplayLanguage());
return message + " " + name;
}
}
由于服务依赖于_MessageRepository_,因此定义…
Spring LDAP 1.2 RC1 发布
尊敬的 Spring 社区:
我们高兴地宣布 Spring LDAP 1.2 的第一个候选版本发布,其中包含许多功能和错误修复。这里只列出了最重要的内容。有关完整的列表,请参阅 变更日志。该版本可供 在此下载。
- 为 Spring LDAP 实现了客户端事务支持。有关更多信息,请参阅参考文档 (LDAP-29)。
- 更改了异常层次结构,使其成为 JNDI NamingException 层次结构的未经检查的镜像 (LDAP-4)。
- Spring LDAP 引发的异常现在始终是可序列化的,无论包装的 NamingException 是否可序列化(并非总是如此)(LDAP-14)。
- 重写了 LdapEncoder.nameDecode() 以解决国家字符问题并删除解析中使用的正则表达式,作为额外的好处,极大地提高了区分名称解析性能 (LDAP-30)。
- 内部升级到 Spring 2.0.4。仍然支持 Spring 1.2.x (LDAP-35, LDAP-51)。
请注意,此版本进行了一些破坏性 API 更改,主要是包重构。因此,这_不是_ Spring LDAP 1.1.2 的直接替换,尽管升级应该不会带来太多工作。有关详细信息,请参阅提供的升级指南。
Spring LDAP 团队
Spring Framework 2.0.5 发布
Spring Web Flow Bean 作用域和 JSF
我最近完成了 Spring Web Flow 中一个有趣的问题。这个问题 (SWF-163) 涉及为 Spring Web Flow 的内部作用域添加 Spring 2.0 Bean 作用域支持。实现本身并不那么有趣(毕竟 Scope 接口很容易实现),但我希望提到如何在应用程序中使用这样的功能。
Spring 2.0 作用域
在 Spring 1.x 中,我们有单例和原型 Bean 作用域的概念,但符号是固定的,并且使用 singleton="[true | false]" 并不是特别具有描述性。因此,在 Spring 2.0 中,此符号已从 XSD 样式的配置中移除,现在您会看到一个更清晰的符号 scope="[singleton | prototype | ...]"。Spring 本身添加了三个额外的 Bean 作用域;request、session 和 globalSession 与 Web 应用程序相关。使用最新的 Spring Web Flow 1.1 快照,我们现在可以看到三个主要 Web Flow 作用域 flash、flow 和 conversation 的 Bean 作用域。
<bean id="sale" class="org.springframework.webflow.samples.sellitem.Sale…
Spring Batch
介绍
我一直在与几家客户合作开发一款名为 Spring Batch 的新产品。其目标是提供工具和应用程序以支持企业环境中的批量处理。Spring Batch 是 Spring 产品组合 的一部分,将在 Spring 2.1 版本系列中首次发布。
构建一些原型代码的最初动力实际上来自多家 Interface21 客户。这提供了一些有用的附加细节和一些实现约束,以便可以将其应用于客户提出的现实世界问题。我希望这篇文章…
强大的组合:SCA、OSGi 和 Spring
不,这不是我的标题,它实际上是 Open SOA 协作 最近发布的白皮书的标题。引用随白皮书一起发布的新闻公告:
“根据用户反馈,OSOA 协作正在发布一篇白皮书,重点介绍 **SCA、Spring 和 OSGi** 技术的强大组合,旨在帮助开发人员简化服务创建和组合,这对于构建基于 SOA 方法的应用程序至关重要。”开放式SOA协作开发了服务协作架构(SCA)规范,合作伙伴包括BEA、IBM、IONA、Oracle、Red Hat、SAP、Siemens、Sun、Tibco等。因此,当这个团队开始围绕“SCA、Spring和OSGi的强大组合”展开行动时,这对于Spring框架以及我们在Spring OSGi项目中所做的工作来说,是一个极大的认可。
这份白皮书简要概述了SCA、OSGi和Spring,然后描述了它们如何一起使用。摘录自摘要部分:
“SCA、OSGi和Spring都是Java程序员可以使用的有用且强大的工具。在我们正在进入的新的面向服务的世界中,将SCA、OSGi和Spring结合使用,可以提供强大的功能,用于使用少量API从一组简单的Java Bean构建服务实现,具有依赖项管理、版本控制和动态更新功能,并能够将这些实现与用Java或其他语言编写的、存在于使用各种通信方法的分布式系统网络中的其他服务组件组合在一起。下周的JavaOne大会上,我将与IBM的Mike Edwards共同就SCA和Spring进行演示:会议TS-8194,“Spring和服务组件架构……”简洁性、灵活性、可管理性、可测试性、可重用性。这是企业开发人员的关键组合。”
从Amazon S3查询和下载
在之前的文章中,我描述了我们如何使用自定义ANT任务来上传Spring产品组合中基于ANT的项目的夜间快照。在这篇文章中,我将描述我们如何使用Amazon S3为每个项目的快照生成页面,并允许用户下载快照。
正如我在上一篇文章中提到的,S3主要用作RESTful服务。这意味着,虽然我使用Java进行上传部分,但我可以自由地使用其他语言进行下载部分。在这种情况下,我选择使用PHP,因为它已经存在于我正在使用的服务器上,并且是……
使用自定义ANT任务上传到Amazon S3
一个健全的CI结构带来的有趣副作用之一是,当事情运行可靠时,新的问题开始出现。在Spring的CI系统开始平稳运行后不久,我们在static.springframework.org上的偶尔空间和带宽问题变得更加突出。Colin Sampaleanu之前已经研究了如何缓解其中一些问题,并选择了Amazon S3。
Amazon S3是Amazon Web Services的一部分,提供了一种极其廉价的在线文件存储服务。“极其廉价”是什么意思?好吧,从网站上看,似乎……
Spring的本质
这发生在上周我在亚特兰大的一家Barnes & Noble书店里。我绕到电脑区,开始浏览书名。我低着头,听到一段关于工作的对话。我没有积极地听,但我知道一方在推销工作,而另一方在打听工作。
几分钟后,只剩下我和那个正在寻找人才的人。我确信他会开始说话。不久之后,他说“所以你是做J2EE的?”,于是谈话开始了。他问我关于我的工作。他不知道Interface21,但当听到它是这家公司……