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!orgspringframeworkeansfactoryxmlspring-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提供了思路:面向《官方文档》学习

原文地址:https://www.cnblogs.com/masting/p/11198530.html