Spring 2.5的新特性:配置简化和基于注解的功能
http://tech.ddvip.com 2008年01月10日 社区交流
内容摘要:本文是探讨这些新特性的3篇系列文章中的第一篇。本文将主要关注于简化的配置和在Spring应用程序上下文(application context)核心新增的基于注解的功能。查看“samples/petclinic”目录下的“readme.txt”文件可以得知关于如何构建和部署PetClinic应用程序。
@Service("petClinic")
public class SimpleJdbcClinic {
...
}
同样的,在下面修正版的FilePoller例子里,生成的bean名字应该是poller而不是filePoller。
@BackgroundTask("poller")
public class FilePoller {
...
}
虽然所有Spring管理对象都被默认地当作单例实例来处理,但有些时候还是有必要为某个对象指明一个备用的范围(scope)。举个例子来说,在web层,一个Spring管理对象可能捆绑到request或session的范围。对于2.0版本,Spring的scope机制更具延展性,这样一来,自定义scope可以被注册到应用程序上下文(application context)。在XML配置中,仅仅是简单地包含进scope属性及该scope的名字就可以了。
id="shoppingCart" class="example.ShoppingCart" scope="session">
...
Spring2.5中,为被扫描的组件提供@Scope注解可以起到同样的作用。
@Component
@Scope("session")
public class ShoppingCart {
...
}
这里要指出的最后一点是使用组件扫描时qualifier注解应用是多么的简单。在上一节,下面这个对象曾被作为使用自定义qualifier注解进行自动装配的例子:
@VetSpecialty("dentistry")
private Clinic dentistryClinic;
同样的例子接着展现了在XML内使用‘qualifier’元素为依赖提供指定目标bean定义。在使用组件扫描时,XML元数据不是必须的。但自定义修饰符也许在目标类定义中被作为类型层注解而引入。另一个将被扫描的@Repository实例作为依赖的例子如下:
@Repository
@VetSpecialty("dentistry")
public class DentistryClinic implements Clinic {
...
}
最终,因为前面的例子展现了自定义注解及其属性的例子,相等同的非XML表示依赖目标的方法如下:
@Repository
@SpecializedClinic(species="dog", breed="poodle")
public class PoodleClinic implements Clinic {
...
}
小结
Spring2.5在很多方面都提供了很有意义的新功能。本文主要关注于怎样通过掌控Java注解的力量将配置简化。就如在JSR-250中定义的那样,Spring支持公共注解(Common Annotations),同时为自动装配过程的更细粒度的控制提供了额外的注解。Spring2.5也扩展了从Spring2.0的@Repository就开始的构造型(stereotype)注解,并且所有这些构造型注解都可以和新的组件扫描功能结合使用。Spring2.5仍然全面支持基于XML的配置,同时它又引进了一个新的context命名空间对常见配置场景提供更精要的文法。实际上,支持XML和基于注解配置的无缝结合最终产生一个更为平衡的全面的方法。基本构架的复杂配置可以在模块XML文件中定义,而应用程序栈日益增多地更高层配置可以更多的从基于注解的技术中获益 - 前提是都在同一个Spring2.5应用程序context内。
在接下来的文章中,我们将讨论到在Spring web层强大的基于注解的新功能项。敬请关注该系列的下一篇文章。
来源:InfoQ中文站 作者:沙晓兰 责编:豆豆技术应用