Spring学习系列(一)被忽视的XSD文件
Spring是个JavaBean容器,相信大部分人在学习Spring时,首先接触的就是如何在XML文件中配置JavaBean。
想要深入了解Spring配置文件的定义,搞清楚如何定义一个Bean,需要研究一下spring-beans.xsd。
1.XML相关知识准备
- XML的约束模式有两种:DTD/Schema。
- DTD的作用是定义XML的合法构建模块,它使用一系列的合法元素来定义文档结构。
- Schema是对XML文档结构的定义和描述,其主要的作用是用来约束XML文件,并验证XML文件有效性。
- Spring1.0采用dtd定义XML,Spring2.0以后改用Schema定义XML。(如果遇到仍然采用dtd定义的xml文件大概是个老古董了)
2.spring-beans.xsd中对bean的解释。
文件地址:http://www.springframework.org/schema/beans/spring-beans.xsd 本地路径:spring-beans-4.3.5.RELEASE.jar!\org\springframework\beans\factory\xml\spring-beans-4.3.xsd
以下内容摘自spring-beans.xsd
Spring XML Beans Schema, version 4.3
Authors:Juergen Hoeller, Rob Harrop, Mark Fisher, Chris Beams(四位都是spring核心人员)
定义一种简单一致的创建JavaBeans对象命名空间的方式。(<beans></beans>)
通过XmlBeanDefinitionReader(和DefaultBeanDefinitionDocumentReader)读取,由Spring BeanFactory管理。
这种文档类型被基于bean工厂的大部分Spring功能使用,包括web应用上下文。
这个文档中的每一个"bean"定义一个JavaBean。
通常这些bean实例由JavaBean的属性和(或)构造器参数明确定义。
一个bean实例可以是"单例模式"的共享实例或者是"原型模式"的独享实例。更多的范围(scopes)由扩展的bean工厂提供,例如在web环境中。
支持beans之间的引用,意味着设置JavaBean的属性或者构造参数时,可以引用同一个工厂(或祖先级工厂)的其他bean。
内部bean定义可以作为一种可选的bean引用,这种内部beans没有独立的生命周期,通常匿名嵌套对象共享其容器bean的作用范围。
支持lists,sets,maps,java.util.Properites作为bean属性或者构造参数的数据类型。
以下列举一些主要的标签
<beans>是根节点,它的一些属性例如:
- profile
在嵌套的<beans>中指定不同的环境的配置参数,
可以在上下文context-param中设置profile.default,profile.active切换不同环境的配置,或使用@Profile,@ActiveProfiles指定配置
- default-lazy-init
此参数表示延时加载,即在项目启动时不会实例化注解的bean,除非启动项目时需要用到,未实例化的注解对象在程序实际访问调用时才注入调用
- default-merge
在继承关系时在子类中合并父类的值
- default-autowire
是否自动注入,如果未设置需要显示的声明ref引入
- default-autowire-candidates
自动注入bean的候选者
- default-init-method,初始化方法
- default-destroy-method,销毁方法
<bean>子节点的一些属性例如:
- id,属性是bean唯一的身份标识。在同一个<beans>下最多只能出现一次
- name
- class
- .....
3.思考总结
由于刚学习Spring,以上举例列出的<beans>的标签和使用,都是在网络中找的解释,认识不够深刻。看来只参照XSD是不够的,想要深入理解还是要参考官方文档。
作为深入学习Spring的第一节课,也为深入学习Spring提供了思路:面向《官方文档》学习。