频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Spring 2.5的新特性:配置简化和基于注解的功能

来源:InfoQ中文站 作者:Mark Fisher/沙晓兰 出处:巧巧读书 2008-01-09 进入讨论组
上一页 1 2 3 4 5 下一页 

若Context中拥有一个指定类型的一个主关键实例,对这个类型定义的bean定义应该包含‘primary’属性。当Context中含有其他可用实例的时候这个方法就很适用,但那些非主关键实例总是显式配置的。

id="dataSource" primary="true" ... />  

在需要更多控制的时候,任何autowired的域、构造参数、或者方法参数可以进一步加注@Qualifier注解。qualifier可以包含一个字符串值,在这种情况下,Spring会试图通过名字来找到对应的对象。

@Autowired
@Qualifier("primaryDataSource")
private DataSource dataSource;

@Qualifier作为一个独立注解存在的主要原因是它可以被应用在构造器参数或方法参数上,但上文提到的@Autowired注解只能运用在构造器或方法本身。

@Autowired
public void setup(@Qualifier("primaryDataSource")

DataSource dataSource, AnotherObject o) {
...

 
事实上,@Qualifier作为一个单独的注解在定制化方面提供了更多的好处。用户自定义的注解在自动装配过程中也可以起到qualifier的作用,最简单的实现方式是在运用自定义注解的同时将@Qualifier作为它的元注解。

@Target({ElementType.FIELD, ElementType.PARAMETER,

ElementType.TYPE, ElementType.ANNOTATION_TYPE})

@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface VetSpecialty { ... } 

自定义注解可以选择包含一个值来提供通过名字匹配的功能,但更普遍的用法是将它作为“标记”注解或定义一个对qualifier过程提供一些更多含义的值。例如,下面这个摘录则描绘了一个域,它应该和通过名字匹配得到的结果中合格的对象进行自动装配。

@Autowired
@VetSpecialty("dentistry")
private Clinic dentistryClinic;  

在使用XML配置来达到依赖解析的目标时,'qualifier' 子元素可以被加注到bean定义中。在下文的组件扫描部分,我们将呈现一个可供选择的非XML方法。

id="dentistryClinic" class="samples.DentistryClinic">
type="example.VetSpecialty" value="dentistry"/>  

为了避免对@Qualifier注解的任何依赖性,可以在Spring context中提供一个CustomAutowireConfigurer的bean定义并直接注册所有自定义注解类型:

<bean class="org.springframework.beans.factory.annotation.CustomAutowireConfigurer">
<property name="customQualifierTypes">
<set>
<value>example.VetSpecialty</value>
</set>
</property>
</bean>  

现在,自定义修饰符被显式声明了,就不再需要@Qualifier这个元注解符了。

@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE,

ElementType.ANNOTATION_TYPE})

@Retention(RetentionPolicy.RUNTIME)
public @interface VetSpecialty { ... }  

其实,在配置AutowiredAnnotationBeanPostProcessor的时候,取代@Autowired注解都是有可能的。

class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor">

name="autowiredAnnotationType" value="example.Injected"/>  

大部分情况下,定义自定义‘标记’注解的能力结合通过名字或其他文法值进行匹配选项,足以完成自动装配过程的细粒度控制。但Spring还支持在qualifier注解上任意数目的任意属性。比如,下面是一个极为细粒度修饰的例子。

@SpecializedClinic(species="dog", breed="poodle")
private Clinic poodleClinic; 

自定义修饰符的实现应该定义这些属性:

@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE,

ElementType.ANNOTATION_TYPE})

@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface SpecializedClinic {
String species();
String breed();
}

自定义修饰符属性可以匹配那些XML中bean定义的qualifier注解的属性子元素。这些元素通常以键/值对方式提供。

id="poodleClinic" class="example.PoodleClinic">
type="example.SpecializedClinic">
key="species" value="dog"/>
key="breed" value="poodle"/>

打开: http://www.qqread.com/java/2008/01/f391815.html 更多文章 更多内容请看电脑配置手册服务器配置专栏Spring开源框架技术专题,或进入讨论组讨论。
上一页 1 2 3 4 5 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章