|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。简介
从出生之初,Spring框架就据守它的主旨:简化企业级使用开辟,同时给庞大成绩供应壮大的、非侵进性办理计划。一年前公布的Spring2.0就把这些主题推到了一个新的高度。XMLSchema的撑持和自界说定名空间的利用年夜年夜削减了基于XML的设置。利用Java5及更新版本java的开辟职员现在能够使用植进了像泛型(generic)和注解等新言语特征的Spring库。比来,和AspectJ表达式言语的严密集成,使得以非侵进体例增加超过界说优秀的Spring办理对象分组的举动成为大概。
新公布的Spring2.5持续保持了这个开展趋势,出格是为那些利用Java5或更新版本java的开辟职员供应了进一步简化而壮大的新特征。这些新特征包含:注解驱动的依附性注进(annotation-drivendependencyinjection),利用注解而非XML元数据来主动侦测classpath上的Spring组件,注解对性命周期办法的撑持,一个新的web把持器模子将哀求映照到加注解的办法上,在测试框架中撑持Junit4,SpringXML定名空间的新增内容,等等。
本文是切磋这些新特征的3篇系列文章中的第一篇。本文将次要存眷于简化的设置和在Spring使用程序高低文(applicationcontext)中心新增的基于注解的功效;第二篇文章将涵盖web层可用的新特征;最初一篇文章将侧重先容集成和测试的新增功能。这一系列的三篇文章中援用的例子都基于SpringPetClinic使用程序典范。此典范比来被重构以用于展现Spring最新功效,并被包括于Spring2.5的公布下载包中,能够从SpringFramework下载网页下载。检察"samples/petclinic"目次下的"readme.txt"文件能够得知关于怎样构建和部署PetClinic使用程序,把握本文提到的新手艺的最好办法大概就是对PetClinic使用程序中所展现的特征举行实验。
Spring撑持JSR-250注解
JavaEE5中引进了“Java平台的大众注解(CommonAnnotationsfortheJavaPlatform)”,并且该大众注解从JavaSE6一入手下手就被包括个中。2006年5月,BEA体系公布了他们在一个名为Pitchfork的项目上与Interface21的互助,该项目供应了基于Spring的JavaEE5编程模子的完成,包含撑持用于注进(injection)、拦阻(interception)和事件处置(transactions)的JSR-250注解和EJB3注解(JSR-220)。在2.5版本中,Spring框架的中心(core)如今撑持以下JSR-250注解:
- @Resource
- @PostConstruct
- @PreDestroy
分离Spring,这些注解在任何开辟情况下都可使用——不管是不是有使用程序服务器——乃至是集成测试情况都能够。激活如许的撑持仅仅是注册一个独自的Springpost-processor的事变:- <beanclass="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>
复制代码 @Resource注解
@Resource注解被用来激活一个定名资本(namedresource)的依附注进,在JavaEE使用程序中,该注解被典范地转换为绑定于JNDIcontext中的一个对象。Spring的确撑持利用@Resource经由过程JNDIlookup来剖析对象,默许地,具有与@Resource注解所供应名字相婚配的“beanname(bean名字)”的Spring办理对象会被注进。鄙人面的例子中,Spring会向加了注解的setter办法传送bean名为“dataSource”的Spring办理对象的援用。- @Resource(name="dataSource")publicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}
复制代码 间接利用@Resource注解一个域(field)一样是大概的。经由过程不表露setter办法,代码愈发松散而且还供应了域不成修正的分外好处。正以下面将要证实的,@Resource注解乃至不必要一个显式的字符串值,在没有供应任何值的情形下,域名将被看成默许值。- @ResourceprivateDataSourcedataSource;//injectthebeannamed"dataSource"
复制代码 该体例被使用到setter办法的时分,默许名是从响应的属性衍生出来,换句话说,定名为"setDataSource"的办法被用来处置名为"dataSource"的属性。- privateDataSourcedataSource;@ResourcepublicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}
复制代码 当@Resource没有显式供应名字的时分,假如依据默许名字找不到对应的Spring办理对象,注进机制会回滚至范例婚配(type-match)。假如恰好只要一个Spring办理对象切合该依附的范例,那末它会被注进。经由过程设置CommonAnnotationBeanPostProcessor的‘fallbackToDefaultTypeMatch’属性为“false”(默许值是“true”)能够禁用这一特征。- <beanclass="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"><propertyname="fallbackToDefaultTypeMatch"value="false"/></bean>
复制代码 正如上文所提到的,在剖析标有@Resource注解的依附时,Spring撑持JNDI-lookup。如若要强迫对一切利用@Resource注解的依附举行JNDIlookup,那也只需将CommonAnnotationBeanPostProcessor的"alwaysUseJndiLookup"标识设置为true就能够了(默许值是false)。- <beanclass="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"><propertyname="alwaysUseJndiLookup"value="true"/></bean>
复制代码 另外一个选择是,激活指定为‘resource-ref-mappings’的根据全局JNDI名的查找,在@Resource注解内供应‘mappedName’属性。即便方针对象实践上是一个JNDI资本,仍旧保举引进一个Spring办理对象,如许能够供应一个直接层而且因而下降耦合水平。自Spring2.0入手下手增加定名空间以来,界说一个托付Spring处置JNDIlookup的bean也变得愈发简洁:- <jee:jndi-lookupid="dataSource"jndi-name="java:comp/env/jdbc/petclinic"/>
复制代码 这个办法的长处在于直接层带来了伟大的部署弹性。好比说,一个独自的体系测试情况应当不再必要JNDI注册。在这类情形下,在体系测试设置中能够供应以下的bean界说:- <beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"p:driverClassName="${jdbc.driverClassName}"p:url="${jdbc.url}"p:username="${jdbc.username}"p:password="${jdbc.password}"/>
复制代码 特地提一下,下面的例子中,实践的JDBC毗连属性从一个属性文件(propertiesfile)剖析而来,在这个属性文件里,关头字与供应的${占位符}相互对应,这必要注册一个名为PropertyPlaceholderConfigurer的BeanFactoryPostProcessor完成来完成。这是详细化那些属性(一般是针对特定情况的属性)经常使用的手艺,这些属性大概比其他设置修正得更加频仍。- <beanclass="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><propertyname="location"value="classpath:jdbc.properties"/></bean>
复制代码 Srping2.5中新到场了‘context’定名空间,这个定名空间让我们可以失掉更加简便的体例来完成属性占位符(propertyplaceholder)的设置:- <context:property-placeholderlocation="classpath:jdbc.properties"/>
复制代码 性命周期注解:@PostConstruct和@PreDestroy
@PostConstruct和@PreDestroy注解分离用来触发Spring的初始化和烧毁回调。这个特征在原有基本上失掉了扩大,但并没有替换在Spring2.5之前版本中供应的一样的回调的另两个选项。第一个选项是完成Spring的InitializingBean和DisposableBean接口中的一个或两个。这两个接口都必要一个回调办法的完成(分离是afterPropertiesSet()和destroy())。这类基于接口的办法使用了Spring主动辨认任何完成这些接口的Spring办理对象的才能,因此不再必要别的的设置。另外一方面,Spring的一个关头方针是尽量的非侵进。因而,很多Spring用户其实不接纳完成这些Spring特定接口的办法,而使用第二个选项,那就是供应他们本人的初始化和烧毁办法。只管进侵性小,但弱点在于利用这个体例的话就必需显式声明bean元素的init-method或destroy-method属性。显式设置偶然候是必需的,比方当回调必要在开辟职员把持才能以外的代码上被挪用的时分。PetClinic使用程序很好地申明了这个场景。当它和JDBC设置一同运转的时分,会用到一个第三方DataSource,而且它显式声了然一个destroy-method。别的要注重到的是,独自的毗连池数据源是dataSource的另外一个部署选项,而且不必要修正任何代码。- @Resource(name="dataSource")publicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}0
复制代码 在利用Spring2.5的过程当中,假如一个对象必要挪用一个初始化的回调办法的话,这个回调办法能够接纳@PostConstruct来注解。比方一个设想的例子,一个背景义务必要在启动的时分就入手下手对一个文件目次举行轮询:- @Resource(name="dataSource")publicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}1
复制代码 相似地,一个在Spring办理对象上用@PreDestroy注解的办法会在这个对象投止的使用程序高低文(applicationcontext)封闭的时分被挪用。- @Resource(name="dataSource")publicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}2
复制代码 在增加了对JSR-250注解的撑持今后,如今的Spring2.5分离后面提到的两种性命周期办法的优点。将@PostConstruct和@PreDestroy作为办法层注解到场,足能够完成在受Spring办理的高低文(context)中触发还调。换句话说,不必要别的基于XML的设置。同时,这两个注解是Java言语自己的一部分(乃至被包含在JavaSE版本6中),以是无需引进特定Spring包。这两个注解具有在其他情况中也能了解的标识语义的长处,跟着工夫的推移,Java开辟职员大概会发明这些注解在第三方开辟库中被愈来愈多的使用到。最初,基于注解性命周期回调的个中一个风趣的了局是,不止一个办法能够带有这两个注解中的任何一个,而且一切注解了的办法会被挪用。
激活方才形貌的关于@Resource、@PostConstruct和@PreDestroy注解的一切举动,正如上文提到的,必要为Spring的CommonAnnotationBeanPostProcessor供应一个bean界说。但另外一个更简洁的办法则多是利用2.5中的新的context定名空间:- @Resource(name="dataSource")publicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}3
复制代码 引进这个单个元素将不但单注册一个CommonAnnotationBeanPostProcessor,也会像下文将叙说的那样激活主动拆卸(autowire)举动。CommonAnnotationBeanPostProcessor也为@WebServiceRef和@EJB注解供应撑持。这些将在本文系列的第三篇中和Spring2.5为企业集成供应的其他新特征一同会商。
使用注解来优化细粒度主动拆卸
涵盖Spring对主动拆卸撑持的文档中经常会提到因为主动拆卸机制的粗粒度而陪伴有良多限定性。Spring2.5之前,主动拆卸能够经由过程良多分歧的体例来设置:机关器,范例setter,名字setter,大概主动侦测(在该体例中Spring选择主动拆卸一个机关器大概范例setter)。这些分歧的选择的确供应了很年夜水平的天真性,但它们中没有一个办法可以供应细粒度把持。换句话说,Spring2.5之前还不成能主动拆卸某个对象setter办法的特定子集,大概经由过程范例或名字来主动拆卸它的一些属性。了局,很多Spring用户意想到将主动拆卸使用到构建原型和测试中的优点,但当提到在产物中保护和撑持体系时,年夜部分人以为,到场冗杂的显式设置关于廓清它所担当的职责长短常值得的。
但是,Spring2.5年夜幅度地改动了结构。如上文所述,主动设置选项如今已被扩大,撑持JSR-250@Resource注解来激活在每一个办法或域基本上被定名资本的主动拆卸。但是,@Resource注解若独自利用的话有良多限定。因而,Sring2.5引进了一个名为@Autowired的注解进一步进步把持级别。为激活这里所讲的举动必要注册一个独自的bean界说:- @Resource(name="dataSource")publicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}4
复制代码 别的如上文提到的,context定名空间供应了一个更简明的办法。它将激活本文所会商的两个post-processor(AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor)和我们在Spring2.0中引进的基于注解的post-processor:RequiredAnnotationBeanPostProcessor和PersistenceAnnotationBeanPostProcessor。- @Resource(name="dataSource")publicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}5
复制代码 使用@Autowired注解能够对响应范例注进依附。域、机关器和办法都能够激活此举动。实践上,aotowired办法其实不必定如果setter办法,且能够承受多个参数。上面这个例子是完全的可承受的用法:- @Resource(name="dataSource")publicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}6
复制代码 默许地,标有@Autowired注解的依附被以为是必需的。但是,也能够将required属性值设置为false来声明它们中的任何一个。鄙人面这个例子中,DefaultStrategy只要在context定名空间中没有SomeStrategy范例的Spring办理对象时才干被利用。- @Resource(name="dataSource")publicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}7
复制代码 经由过程范例举行的主动拆卸分明地在Springcontext包括多于一个希冀范例的对象的时分形成歧义。默许地,假如一个必需的依附没不是刚好一个bean与之对应的话,主动拆卸机制就会失利。一样的,关于任何一个可选属性,假如它具有一个以上的候选,也城市失利(假如属性可选且没有任何候选可用的话,该属性则会被复杂地跳过)。有良多分歧的设置选项能够制止这些抵触。
若Context中具有一个指定范例的一个主关头实例,对这个范例界说的bean界说应当包括‘primary’属性。当Context中含有其他可用实例的时分这个办法就很合用,但那些非主关头实例老是显式设置的。- @Resource(name="dataSource")publicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}8
复制代码 在必要更多把持的时分,任何autowired的域、机关参数、大概办法参数能够进一步加注@Qualifier注解。qualifier能够包括一个字符串值,在这类情形下,Spring会试图经由过程名字来找到对应的对象。- @Resource(name="dataSource")publicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}9
复制代码 @Qualifier作为一个自力注解存在的次要缘故原由是它能够被使用在机关器参数或办法参数上,但上文提到的@Autowired注解只能使用在机关器或办法自己。- @ResourceprivateDataSourcedataSource;//injectthebeannamed"dataSource"0
复制代码 现实上,@Qualifier作为一个独自的注解在定制化方面供应了更多的优点。用户自界说的注解在主动拆卸过程当中也能够起到qualifier的感化,最复杂的完成体例是在使用自界说注解的同时将@Qualifier作为它的元注解。- @ResourceprivateDataSourcedataSource;//injectthebeannamed"dataSource"1
复制代码 自界说注解能够选择包括一个值来供应经由过程名字婚配的功效,但更广泛的用法是将它作为“标志”注解或界说一个对qualifier历程供应一些更多寄义的值。比方,上面这个摘录则刻画了一个域,它应当和经由过程名字婚配失掉的了局中及格的对象举行主动拆卸。- @ResourceprivateDataSourcedataSource;//injectthebeannamed"dataSource"2
复制代码 在利用XML设置来到达依附剖析的方针时,"qualifier"子元素能够被加注到bean界说中。鄙人文的组件扫描部分,我们将出现一个可供选择的非XML办法。- @ResourceprivateDataSourcedataSource;//injectthebeannamed"dataSource"3
复制代码 为了不对@Qualifier注解的任何依附性,能够在Springcontext中供应一个CustomAutowireConfigurer的bean界说并间接注册一切自界说注解范例:- @ResourceprivateDataSourcedataSource;//injectthebeannamed"dataSource"4
复制代码 如今,自界说润色符被显式声了然,就不再必要@Qualifier这个元注解符了。- @ResourceprivateDataSourcedataSource;//injectthebeannamed"dataSource"5
复制代码 实在,在设置AutowiredAnnotationBeanPostProcessor的时分,代替@Autowired注解都是有大概的。- @ResourceprivateDataSourcedataSource;//injectthebeannamed"dataSource"6
复制代码 年夜部分情形下,界说自界说‘标志’注解的才能分离经由过程名字或其他文法值举行婚配选项,足以完成主动拆卸历程的细粒度把持。但Spring还撑持在qualifier注解上恣意数量的恣意属性。好比,上面是一个极其细粒度润色的例子。- @ResourceprivateDataSourcedataSource;//injectthebeannamed"dataSource"7
复制代码 自界说润色符的完成应当界说这些属性:- @ResourceprivateDataSourcedataSource;//injectthebeannamed"dataSource"8
复制代码 自界说润色符属性能够婚配那些XML中bean界说的qualifier注解的属性质元素。这些元素一般以键/值对体例供应。- @ResourceprivateDataSourcedataSource;//injectthebeannamed"dataSource"9
复制代码 今朝为止,关于autowire的形貌都只是针对独自的实例,实在也撑持汇合。在任何必要失掉一切context中某种特定范例的Spring办理对象的时分,只必要复杂地在一个强范例(strongly-typed)汇合上加注@Autowired注解。- privateDataSourcedataSource;@ResourcepublicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}0
复制代码 本章节最初一个值得指出的特征是主动拆卸的利用替换了Spring的Aware接口。在Spring2.5之前,假如某个对象必要一个Springcontext的ResourceLoader的援用,它能够经由过程完成ResourceLoaderAware的体例使得Spring经由过程setResourceLoader(ResourceLoaderresourceLoader)办法来供应该依附。借助一样的办法能够失掉Spring办理的MessageSource的援用,乃至能够失掉ApplicationContext自己。关于Spring2.5用户而言,这个举动如今经由过程autowiring失掉周全撑持(必要指出的是包括这些Spring特定依附的时分应当思索周密,出格是它们只能用于从营业逻辑分明地支解出来的基本构架代码中)。- privateDataSourcedataSource;@ResourcepublicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}1
复制代码 主动侦测Spring组件
从2.0版本入手下手,Spring引进了机关型(stereotype)注解的观点和将@Repository注解作为数据会见代码的标志的办法。在此基本上,Spring2.5又到场了两个新的注解——@Service和@Controller来完成为一般的三层架构(数据会见对象、服务、web把持器)脚色委任。Spring2.5也引进了泛型@Component注解,其他机关型可从逻辑上对其举行扩大。经由过程明晰地指明使用程序的脚色,这些机关型便利了SpringAOP和post-processor的利用,这些post-processor给基于这些脚色的加了注解的对象供应了附加举动。好比,Spring2.0引进了PersistenceExceptionTranslationPostProcessor对任何带有@Repository注解的对象主动激活其数据会见非常转换。
这些注解一样能够分离Spring2.5其他一些新功能来利用:主动侦测classpath上的组件。只管XML已成为最多见的Spring元数据的格局,但它决不是独一选择。实践上,Spring容器内的元数据是由纯Java来暗示的,当XML被用来界说Spring办理对象时,在实例化历程之前,那些界说会被剖析并转化成Java对象。Spring2.5的一个伟大的新功效是撑持从源码层注解读取元数据。因此,上文形貌的主动拆卸机制利用注解的元数据来注进依附,但它仍旧必要注册最少一个bean界说以便供应每一个Spring办理对象的完成类。组件扫描功效则使得这个XML中最最少的bean界说都不再存在需求性。
正如下面所示,Spring注解驱动的主动拆卸能够在不就义细粒度把持的条件下极年夜水平地削减XML的利用。组件侦测机制将这个长处更发扬光年夜。周全替换XML中的设置不再需要,组件扫描反而能够处置XML元数据来简化全体设置。分离XML和注解驱动手艺能够失掉一个均衡优化的办法,这在2.5版本的PetClinic典范中有具体论述。在该典范中,基本构架组件(数据源、事件办理等)分离上文提到的外化属性在XML中界说。数据会见层对象也有部分在XML中界说,它们的设置也都使用了@Autowired注解来简化依附注进。最初,web层把持器完整不在XML中显式界说,相反,上面供应的这段设置被用来触发一切web把持器的主动侦测:- privateDataSourcedataSource;@ResourcepublicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}2
复制代码 必要注重到的是这段示例中利用到了base-package属性。组件扫描的默许婚配划定规矩会递回侦测该包(多个包能够以逗号分开的list体例供应)内的一切类的一切Spring机关型注解。正由于云云,PetClinic使用程序典范中的各种把持器的完成都接纳了@Controller注解(Spring的内置机关型之一)。请看上面这个例子:- privateDataSourcedataSource;@ResourcepublicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}3
复制代码 主动侦测组件在Spring容器中注册,就像它们在XML中被界说一样。如上所示,那些对象能够轮番使用注解驱动的主动拆卸。
组件扫描的婚配划定规矩能够经由过程过滤器(filter)来自界说,以依据范例、AspectJ表达式、或针对定名形式的正则表达式来决意包括或不包括哪些组件。默许的机关型也能够被禁用。好比这里有一个设置的例子,这个设置会疏忽默许的机关型,但会主动侦测名字以Stub打头大概包括@Mock注解的一切类:- privateDataSourcedataSource;@ResourcepublicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}4
复制代码 范例婚配的限定性也能够用排他的过滤器把持。比方,除@Repository注解外其他都依附于默许过滤器,那末就必要到场一个排他过滤器(exclude-filter)。- privateDataSourcedataSource;@ResourcepublicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}5
复制代码 很分明,有良多办法能够扩大组件扫描来注册自界说的范例。机关型注解是最复杂的选择,以是机关型观点自己也是可扩大的。像先条件到的,@Component是泛型模子,@Repository、@Service,和@Controller注解都从该机关型逻辑扩大而得。正由于云云,@Component可被用来作为元注解(也就是说,在别的的注解上声明的注解),一切具有@Component元注解的自界说注解城市被默许扫描婚配划定规矩主动侦测到。一个例子就有但愿让你了解到实在它基本没有听起来那末难。
让我们回忆一下在讲@PostConstruct和@PreDestroy性命周期注解的时分的设想的背景义务。大概一个使用程序有良多良多如许的背景义务,这些义务实例必要XMLbean界说以便在Springcontext里注册并使它们本人的性命周期办法在准确时分被挪用。使用组件扫描就不再必要这些显式的XMLbean界说。假如这些背景义务都完成一个不异的接口大概都相沿一样的定名常规,那末能够用include-filters。但是,更复杂的办法是为这些义务对象创立一个注解并供应@Component元注解。- privateDataSourcedataSource;@ResourcepublicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}6
复制代码 然后在一切背景义务的类界说中供应自界说机关型注解。- privateDataSourcedataSource;@ResourcepublicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}7
复制代码 泛型@Component注解能够像例子中供应的那样复杂利用,自界说注解手艺则供应了一个利用更具涵义的、范畴特定的名字的时机。这些范畴特定注解供应更深切的时机,好比利用AspectJ切点表达式来辨认一切背景义务,以便增添advice来监控这些义务的举动性。
默许的,组件被侦测到的时分,Spring会主动天生一个没有润色符的类名作为bean名字。上一个例子中,天生的bean名字会是filePoller。可是,任何加注了Spring机关型注解(@Component、@Repository、@Service或@Controller)或是加注了其他的以@Component作为元注解的注解(好比下面例子中的@BackgroundTask)的类,机关型注解的value属性能够被显式指定,实例将该值作为它的bean名字注册到context中。接上去的例子里,实例名应当是petClinic而不是默许天生的名字simpleJdbcClinic。- privateDataSourcedataSource;@ResourcepublicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}8
复制代码 一样的,鄙人面修改版的FilePoller例子里,天生的bean名字应当是poller而不是filePoller。- privateDataSourcedataSource;@ResourcepublicvoidsetDataSource(DataSourcedataSource){this.dataSource=dataSource;}9
复制代码 固然一切Spring办理对象都被默许地看成单例实例来处置,但有些时分仍是有需要为某个对象指明一个备用的局限(scope)。举个例子来讲,在web层,一个Spring办理对象大概绑缚到request或session的局限。关于2.0版本,Spring的scope机制更具延展性,如许一来,自界说scope能够被注册到使用程序高低文(applicationcontext)。在XML设置中,仅仅是复杂地包括进scope属性及该scope的名字就能够了。- <beanclass="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"><propertyname="fallbackToDefaultTypeMatch"value="false"/></bean>0
复制代码 Spring2.5中,为被扫描的组件供应@Scope注解能够起到一样的感化。- <beanclass="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"><propertyname="fallbackToDefaultTypeMatch"value="false"/></bean>1
复制代码 这里要指出的最初一点是利用组件扫描时qualifier注解使用是何等的复杂。在上一节,上面这个对象曾被作为利用自界说qualifier注解举行主动拆卸的例子:- <beanclass="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"><propertyname="fallbackToDefaultTypeMatch"value="false"/></bean>2
复制代码 一样的例子接着展示了在XML内利用‘qualifier’元素为依附供应指定方针bean界说。在利用组件扫描时,XML元数据不是必需的。但自界说润色符大概在方针类界说中被作为范例层注解而引进。另外一个将被扫描的@Repository实例作为依附的例子以下:- <beanclass="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"><propertyname="fallbackToDefaultTypeMatch"value="false"/></bean>3
复制代码 终极,由于后面的例子展示了自界说注解及其属性的例子,相称同的非XML暗示依附方针的办法以下:- <beanclass="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"><propertyname="fallbackToDefaultTypeMatch"value="false"/></bean>4
复制代码 小结
Spring2.5在良多方面都供应了很成心义的新功效。本文次要存眷于如何经由过程掌控Java注解的力气将设置简化。就如在JSR-250中界说的那样,Spring撑持大众注解(CommonAnnotations),同时为主动拆卸历程的更细粒度的把持供应了分外注解。Spring2.5也扩大了从Spring2.0的@Repository就入手下手的机关型(stereotype)注解,而且一切这些机关型注解都能够和新的组件扫描功效分离利用。Spring2.5仍旧周全撑持基于XML的设置,同时它又引进了一个新的context定名空间对罕见设置场景供应更精要的文法。实践上,撑持XML和基于注解设置的无缝分离终极发生一个更加均衡的周全的办法。基础构架的庞大设置能够在模块XML文件中界说,而使用程序栈日趋增加地更高层设置能够更多的从基于注解的手艺中获益——条件是都在统一个Spring2.5使用程序context内。
在接上去的文章中,我们将会商到在Springweb层壮大的基于注解的新功效项。敬请存眷该系列的下一篇文章。
检察英文原文:What"sNewinSpring2.5:Part1
来自:http://www.infoq.com/cn/articles/spring-2.5-part-1
后文续:
Spring2.5:SpringMVC中的新特征
由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak, |
|