Spring : 基于XML Schema的配置(一)

【本教程翻译自Spring官方文档,并有适当增删】

(是针对Spring 4.0.6 Release版本的)

基于XML Schema的配置在Spring 2.0开始被引入,并在2.5和3.0版本得到增强和扩展。

转向基于XML Schema的动机是使得Spring XML配置更简单。传统的基于 的方法是很好,但它的通用特性带来了很大的配置开销。

从Spring 依赖注入容器的观点来看,一切都是bean。这对Spring 容器是个好消息,因为如果一切都是bean,那么一对象都能以相同的方式看待。但在程序员看来并不是这样,因为在Spring XML配置文件的对象并不是通用的bean。常见的情况是,每个bean需要一定程度上的特殊配置。

Spring 2.0新出现的基于XML Schema的配置解决了这一问题。元素还是存在的,如果你愿意的话,还可以只使用元素。新的基于XML Schema的配置语法使得Spring XML的可读性更好,且允许你更好表达一个bean的意图。

关键是记住:新的自定义标签将最适合基础性或整合类的beans,比如AOP(切面编程)、集合、事务、整合第三方框架等。而已存在的bean 标签最适合特殊用途的beans,如DAOS,服务层对象,验证器对象等。


  • 引用模式

你得由DTD风格的转变到XML Schema风格。

 









XML Schema风格的如下:




    


笔者注:如果你想笔者一样最早接触的是Spring 3.0,那么你应该也会对DTD风格的配置文件感到陌生。


需要说明的是,xsi:schemaLocation片段并不是必须的,但它能被包含去引用一个模式的本地副本。(在开发时有用)


本教程的以下部分是介绍新的基于XML Schema标签,每个讲解由至少一个例子,并有之前的版本写法(100%合法并支持,但显然麻烦得多)。


  • util 模式

正如名字暗示的,util标签处理的是一些常见的,实用工具类的配置问题,比如集合、常量等。

当然,你得首先引入命名空间完成正确的模式引用。


 




比如说,过去你可能使用下面的配置:


    
        
    

上面的配置使用了FactoryBean的一个实现FieldRetrievingFactoryBean,并对isolation属性设值(一个常量: java.sql.Connection.TRANSACTION_SERIALIZABLE)。这样写当然没问题,但却像用户暴露了Spring 的内部注入方法。

现在,你可以这样写:


    
        
    

FieldRetrievingFactoryBean是用来获取静态或非静态的字段,通常是用public static final 修饰的常量,(用来设值注入或构造器注入)

下面展示的是如何暴露一个静态字段,(使用staticField)


    

还有一种便捷的写法,就是将静态字段作为一个bean的名字。



这样就表明没必要再去选择bean的id是什么,但这种形式又是非常精确和方便的用做内部bean。


当然,它也可以获取非静态字段。但用的不多,这里不再介绍。



你以前可能这样写:



    
    
        
            
        
    




上述配置使用了FactoryBean的一个实现PropertyPathFactoryBean来创建一个名叫testBean.age的bean(类型是int),它的值和testBean的age属性相同。

现在你可以:



    
    
        
            
        
    




PropertyPathFactory能够计算一个给定目标对象的属性路径。这个目标对象可以直接指出或通过bean的名字。


// target bean to be referenced by name

    
    
        
            
        
    


// will result in 11, which is the value of property spouse.age of bean person

    
    

上面的配置是通过bean的名字指出,(注意, targetBeanName和propertyPath)

下面一段的配置是直接通过内部bean计算属性路径的:



    
        
            
        
    
    

我们还有一种简写的方法,就是用路径做id.





以前你要这样去引用一个properties文件:



    

现在,可以:






你可能感兴趣的:(重学Java)