超越 FactoryBean

工程 | Josh Long | 2011年8月10日 | ...

在我上一篇文章中,我介绍了基本的 FactoryBean 是什么。虽然 FactoryBeans 很重要——了解它们的作用可以帮助你更有效地驾驭框架——但就 Spring 3.0 和即将发布的 Spring 3.1 而言,它们已不再是推荐的做法。

FactoryBean 的核心思想是隐藏对象的构造——因为它非常复杂,或者因为它不能仅仅使用 Spring 容器常用的以构造函数为中心的典型方法来实例化(也许它需要被查找?也许它需要一个静态注册方法?)。Spring 在 XML 格式中也支持 factory-method 属性。Java 配置方法提供了一个在概念上相似(实际上,结果相同)的替代方案,但具有更简洁、类型安全的选择。

Spring 3.0 引入了 Java 配置,它允许你使用 Java 定义 bean。例如,要在 XML 中将一个普通的 javax.sql.DataSource 注册到 Spring,你很可能会委托给一个属性文件来获取敏感的配置信息(如数据库密码),然后使用 Spring 来实例化 javax.sql.DataSource,如下所示:


<beans ...>
	<context:property-placeholder location = "ds.properties" />

	<bean id = "ds" class = "a.b.c.MySqlDataSource">
	  <property name = "user" value = "${ds.user}"/>
	  <property name = "password" value = "${ds.password}"/>
	</bean>
</beans>

这是一个简单的 bean,自然地转化为 Java 配置。它看起来会是这样:

 
import a.b.c.* ;
	
@Configuration 
@PropertySource("ds.properties") 
public class MyConfiguration { 
    @Inject private Environment env ; 
	
    @Bean public MySqlDataSource ds(){ 
        MySqlDataSource ds = new MySqlDataSource () ; 
        ds.setUser( env.getProperty("ds.user") );
        ds.setPassword( env.getProperty("ds.password…

什么是 FactoryBean?

工程 | Josh Long | 2011年8月9日 | ...

在这篇文章中,我将介绍 Spring 的 org.springframework.beans.factory.FactoryBean<T> 接口。这个接口的定义是:


public interface FactoryBean<T> {
  T getObject() throws Exception;
  Class<T> getObjectType();
  boolean isSingleton();
}

FactoryBean 是一种模式,用于将有趣的、对象构造逻辑封装在一个类中。例如,它可以用来以可重用的方式编码复杂对象图的构造。这通常用于构造具有许多依赖关系的复杂对象。当构造逻辑本身高度易变并依赖于配置时,它也可能被使用。FactoryBean 还有助于 Spring 构建它自己无法轻松构建的对象。例如,为了注入一个从 JNDI 获取的 bean 的引用,必须首先获得该引用。你可以使用 JndiFactoryBean 以一致的方式获取此引用。你可以将 FactoryBeangetObject() 方法的结果注入到任何其他属性中。

假设你有一个 Person 类,其定义如下:


public class Person { 
 private Car car ;
 private void setCar(Car car){ this.car = car;  }	
}

以及一个 FactoryBean,其定义如下:


public class MyCarFactoryBean implements FactoryBean<Car>{
  private String make; 
  private int year ;

  public void setMake(String m){ this.make =m ; }

  public void setYear(int y){ this.year = y; }

  public Car getObject(){ 
    // wouldn't be a very useful FactoryBean 
    // if we could simply instantiate the object…

视频:Adrian Colyer 讨论 2011 年及未来的企业应用

新闻 | Adam Fitzgerald | 2011年08月08日 | ...

Adrian Colyer Talks about the Future of Enterprise Development

五月在巴黎举行的 What's Next 会议是有史以来在法国举办的最大型的 Java 活动之一,为充满活力的法国开发者社区注入了活力。它汇聚了来自世界各地最重要的 Java 专家,就 Java 平台周围重要的新兴技术进行了高级别讨论。

SpringSource 的 Adrian Colyer 有机会向听众发表演讲,他讨论了 云计算的当前趋势,特别是涵盖了 PaaS,并引用了 Cloud Foundry,重点关注 PaaS 如何影响企业应用程序的设计和开发。

非常感谢 InfoQ 现场记录了此次演示。

本周 Spring:2011年8月2日

工程 | Josh Long | 2011年8月3日 | ...

欢迎来到另一期“本周 Spring”。八月已经过半,在月底,VMworld 2011 即将到来。不久之后,SpringOne 也将如期而至。事情将很快变得火热而紧张,所以做好准备!本周的“本周 Spring”内容丰富,来自 Chariot Solutions 的 Gordon Dickens。感谢 Gordon 带来的精彩阅读!

  1. Spring 的创始人兼思想领袖 Rod Johnson 今年早些时候在 TheServerSide 发表了主题演讲。 这篇文章转述了该主题演讲的一些内容,包括他对云计算、SOA 等的看法。敬请关注。
  2. <LI> 
    	The video of the recent webinar, "<A href="http://www.springsource.org/node/3194">What's New in Apache Tomcat 7</a>," is now available on the <a href="http://www.youtube.com/SpringSourceDev">SpringSourceDev YouTube channel</a>.   
    </LI> 
    <LI>Luke Taylor has some great content on how to <a href="http://blog.springsource.com/2011/08/01/spring-security-configuration-with-scala/">configure Spring Security with the Scala DSL</a> he's been developing. Check it out! 
    </LI> 
    <LI> 
    	<a href= "http://www.springsource.org/node/3192">Spring Data JDBC Extensions with Oracle Database Support</a>…

调试 DSLD 脚本

工程 | Andrew Eisenberg | 2011年8月2日 | ...

不久前,我为 Groovy-Eclipse 引入了 DSL 描述符 (DSLDs)。DSLDs 是 Groovy 脚本,为 Eclipse 工作区中的 Groovy 项目提供丰富的编辑支持(内容辅助、导航等)。由于 DSLDs 只能在运行中的 Eclipse 进程中执行,因此调试不像启动 Eclipse 调试器并逐步执行 Groovy 脚本那么简单。在这篇文章中,我将描述一些可用于调试 DSLD 的简单和更复杂的技术。

要使所有这些工作,您需要最新的开发版本

简单而粗糙

调试 DSLD 最简单和最粗糙的方法是使用 println。这会将表达式打印到正在运行的 Eclipse 进程的标准输出,如果您从命令行启动 Eclipse,则可以看到。但是,我建议改用 log 语句。这会将日志信息打印到 Groovy 事件控制台……

Spring Security 与 Scala 配置

工程 | Luke Taylor | 2011年08月01日 | ...

在之前的文章Spring Security 命名空间背后中,我谈到了 Spring Security 命名空间在提供简单替代方案方面非常成功,能够替代普通的 Spring bean 配置,但是当您想要开始自定义其行为时,仍然存在陡峭的学习曲线。在 XML 元素和属性背后,各种过滤器和辅助策略被创建并连接在一起,但是,除了阅读处理 XML 解析的代码之外,没有简单的方法可以弄清楚涉及哪些类以及它们如何交互的细节。

一段时间以来,我们一直试图提出一种替代的基于 Java 的解决方案,使用Spring 的 @Configuration,该方案既能保持 XML 命名空间的简洁性,又能使底层行为更加透明且更易于定制。虽然理论上可行,但没有基于 Java 的解决方案似乎能满足……

视频:Apache Tomcat 7 的新特性

新闻 | Adam Fitzgerald | 2011年08月01日 | ...

Mark Thomas 讨论了 Apache Tomcat 7 中所有最新的功能。他谈到了规范的变化(Servlet 3.0、JSP 2.2、Expression Language 2.2),一些新功能(JMX 增强、性能改进、新的并行部署),并描述了后续版本的计划。请观看 视频,或者您可以从 S2G Forum 2011 存档下载 幻灯片

如果您觉得这个演示很有用,请务必为其点赞,并 订阅 SpringSourceDev 频道,以便及时收到所有最新演示录制和屏幕录像的更新。

Spring Data JDBC 扩展与 Oracle 数据库支持 1.0.0.M2 发布

版本发布 | Thomas Risberg | 2011 年 7 月 28 日 | ...

亲爱的Spring社区,

我们很高兴地宣布,Spring Data JDBC 扩展 1.0 项目与 Oracle 数据库支持的第二个里程碑版本 (1.0.0.M2) 现已发布!

新的 Spring Data JDBC Extensions 项目旨在提供对特定厂商 JDBC 扩展的额外支持,以及像 QueryDSL 这样的使用 JDBC 的新方法。大部分支持代码是从 SpringSource 的“Advanced Pack for Oracle Database”项目移植过来的,该项目曾为订阅客户提供支持。现在,我们向所有 Spring 用户开放这段代码…

Spring Social 1.0.0.RC2 发布

版本发布 | Craig Walls | 2011 年 7 月 27 日 | ...

亲爱的Spring社区,

我们很高兴地宣布 Spring Social 1.0.0.RC2 版本发布。Spring Social 可让您将 Java 应用程序连接到 Facebook 和 Twitter 等软件即服务 (SaaS) 提供商。

本次公告针对 Spring Social 核心项目以及今日也发布 1.0.0.RC2 版本的 Spring Social Facebook 和 Spring Social Twitter 项目。

此版本包含自 1.0.0.RC1 以来报告的错误修复以及一些改进。

  • Twitter 和 Facebook 客户端现在支持可以返回分页结果的 API 操作的分页。
  • ProviderSignInController 现在处理用户拒绝授权的情况。
  • 在提供商登录尝试中匹配多个本地用户的情况现在已得到处理。
  • 示例应用程序集已更新。

有关此版本新内容的更多信息,请参阅更改日志 (核心 | Facebook | Twitter)。

要获取软件,请下载发布版本 distribution (Core | Facebook | Twitter) 或者直接将 maven 依赖 添加到您的项目中。要实时体验,请尝试 快速入门 并启动 示例应用程序(已针对 1.0.0.RC2 更新)。如有疑问,请参考 参考手册

Spring Social 需要 Spring Framework 3.0.5 或更高版本才能运行。我们建议新应用程序使用 Spring 3.1,以利用核心框架的最新进展。有关依赖关系的完整说明,请参阅参考手册。

非常感谢社区帮助我们发现并解决 RC1 中的问题。随着我们向 GA 版本迈进,我们感谢社区的参与,并期待听到您对 RC2 版本的看法。请参与 论坛,或者,如果您有任何建议或发现任何错误,请在 问题跟踪器中报告。

希望您在使用 Spring Social 的过程中愉快!

微调 Spring Data 仓库

工程 | Oliver Drotbohm | 2011 年 7 月 27 日 | ...

距离我们发布 Spring Data JPA 1.0 GA 仅仅几天时间,这是 Spring Data Spring Data 项目的第一个主版本,它在我们的 Spring Data Commons 模块中提供了仓库抽象的实现。仓库抽象包含三个主要部分:定义仓库接口、公开 CRUD 方法以及添加查询方法。在 第一篇 Spring Data JPA 博客文章 中已经详细讨论了添加查询方法。但是,在之前的博客文章中,定义仓库接口和公开 CRUD 方法引发了不少问题。这就是为什么我们将…

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有