超越 FactoryBean

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

我在之前的文章中探讨了基本的FactoryBean是什么。虽然FactoryBean很重要——了解它们的作用可以帮助你更有效地使用框架——但在Spring 3.0及即将推出的Spring 3.1中,它们已不再是推荐的解决方法。

FactoryBean的重点是隐藏对象的构造——要么是因为它非常复杂,要么是因为它不能简单地使用Spring容器常用的构造函数中心方法进行实例化(也许需要查找?也许需要静态注册方法?)Spring还支持XML格式中的factory-method属性。Java配置方法提供了一种概念上类似的(实际上,结果相同)替代方案,但它提供了一种更简洁、类型安全的替代方案。

Spring 3.0引入了Java配置,它允许你使用Java定义bean。例如,要在XML中使用Spring注册一个普通的javax.sql.DataSource,你很可能会委托给一个属性文件来获取敏感的配置信息(如数据库密码),并使用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年8月8日 | ...

Adrian Colyer Talks about the Future of Enterprise Development

5月份在巴黎举行的What's Next会议是有史以来在法国举办的最大型Java活动之一,它激发了充满活力的法国开发者社区。它汇集了来自世界各地许多最重要的Java专家,以高水平讨论围绕Java平台的重要新兴技术。

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

非常感谢InfoQ 帮助记录了这次演讲。

本周 Spring:2011年8月2日

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

欢迎来到另一期“本周 Spring”。8月份已经开始,很快,在8月底,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日 | ...

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

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

简单而粗略的方法

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

使用 Scala 进行 Spring Security 配置

工程 | Luke Taylor | 2011年8月1日 | ...

在之前的文章Spring Security 命名空间背后的原理中,我谈到了 Spring Security 命名空间如何在提供简单的替代方案方面非常成功,但当你想要开始自定义其行为时,仍然存在较高的学习曲线。在 XML 元素和属性的背后,创建并连接了各种过滤器和辅助策略,但是,除了阅读处理 XML 解析的代码之外,没有简单的方法可以确定涉及哪些类或它们如何交互的详细信息。

一段时间以来,我们一直在尝试使用Spring 的@Configuration提出一种基于 Java 的替代解决方案,该方案保留了 XML 命名空间的简单性,但也使底层行为更透明、更容易自定义。虽然理论上可行,但似乎没有基于 Java 的解决方案能够满足……

视频:Apache Tomcat 7 的新增功能

新闻 | Adam Fitzgerald | 2011年8月1日 | ...

Mark Thomas 讨论了 Apache Tomcat 7 中提供的所有最新功能。他讨论了规范更改(Servlet 3.0、JSP 2.2、表达式语言 2.2)一些新功能(JMX 增强、性能改进、新的并行部署),并描述了后续版本的计划。请查看视频,或者可以从S2G Forum 2011 存档下载幻灯片

如果你觉得有用,请点赞该演示,并订阅 SpringSourceDev 频道以接收所有最新演示录音和屏幕录像的更新。

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

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

尊敬的 Spring 社区:

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

创建新的 Spring Data JDBC Extensions 项目是为了为特定于供应商的 JDBC 扩展以及使用 JDBC 的新方法(如 QueryDSL)提供额外的支持。大部分支持都是从 SpringSource 项目“Oracle 数据库高级包”移植的代码,该包可供订阅支持的客户使用。我们现在向所有 Spring……

Spring Social 1.0.0.RC2 发布

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

尊敬的 Spring 社区:

我们很高兴地宣布发布Spring Social 1.0.0.RC2。Spring Social 允许你将 Java 应用程序连接到软件即服务 (SaaS) 提供商,例如 Facebook 和 Twitter。

此公告适用于 Spring Social 核心项目以及 Spring Social Facebook 和 Spring Social Twitter 项目,它们今天也发布了 1.0.0.RC2 版本。

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

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

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

要获取软件,请下载发行版(核心版 | 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 Commons 模块中提供了一个仓库抽象的实现。仓库抽象包含三个主要部分:定义仓库接口、公开 CRUD 方法和添加查询方法。在第一篇 Spring Data JPA 博客文章中详细讨论了添加查询方法。但是,定义仓库接口和公开 CRUD 方法在之前的博客文章中引发了一些问题。这就是我们将要……

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,以加快您的进度。

了解更多

获得支持

Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

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

查看全部