尽管Spring长期以来确实与XML有着关联,但现在需要明确的是,XML不再是配置Spring的唯一可选方案。Spring现在有了强大的自动化配置和基于Java的配置,XML不应该再是你的第一选择了。不过,鉴于已经存在那么多基于XML的Spring配置,所以理解如何在Spring中使用XML还是很重要的。但是,我希望本节的内容只是用来帮助你维护已有的XML配置,在完成新的Spring工作时,希望你会使用自动化配置和JavaConfig。
1.1创建XML配置规范
在使用XML为Spring装配bean之前,你需要创建一个新的配置规范。在使用JavaConfig的时候,这意味着要创建一个带有@Configuration注解的类,而在XML配置中,这意味着要创建一个XML文件,并且要以<beans>元素为根。
很容易就能看出来,这个基本的XML配置已经比同等功能的JavaConfig类复杂得多了。作为起步,在JavaConfig中所需要的只是@Configuration,但在使用XML时,需要在配置文件的顶部声明多个XML模式(XSD)文件,这些文件定义了配置Spring的XML元素。借助Spring Tool Suite创建XML配置文件创建和管理Spring XML配置文件的一种简便方式是使用Spring ToolSuite(https://spring.io/tools/sts)。在Spring Tool Suite的菜单中,选择File>New>Spring Bean Configuration File,能够创建SpringXML配置文件,并且可以选择可用的配置命名空间。
1.2声明一个简单的<bean>
要在基于XML的Spring配置中声明一个bean,我们要使用spring-beans模式中的另外一个元素:<bean>。<bean>元素类似于JavaConfig中的@Bean注解。我们可以按照如下的方式声明CompactDiscbean:
这里声明了一个很简单的bean,创建这个bean的类通过class属性来指定的,并且要使用全限定的类名。因为没有明确给定ID,所以这个bean将会根据全限定类名来进行命名。在本例中,bean的ID将会是“soundsystem.SgtPeppers#0”。其中,“#0”是一个计数的形是借助id属性,为每个bean设置一个你自己选择的名字:
1.3借助构造器注入初始化bean
但是,在XML中声明DI时,会有多种可选的配置方案和风格。具体到
构造器注入,有两种基本的配置方案可供选择:
明CDPlayer并通过ID引用SgtPeppers:
为compactDisc的bean引用传递到CDPlayer的构造器中。
方式。要使用它的话,必须要在XML的顶部声明其模式,如下所示
在c-命名空间和模式声明之后,我们就可以使用它来声明构造器参数
了,如下所示:
CompactDisc的一个新实现,如下所示:
样,它可以设置成任意你想要的艺术家和唱片名。现在,我们可以将
已有的SgtPeppers替换为这个类:
案是引用构造器参数的名字:
实现,c-命名空间却无法做到的。接下来,让我们看一下如何将集合
装配到构造器参数中。
表
当list中元素是引用类型时
1.4设置属性
Spring XML实现属性注入。假设属性注入的CDPlayer如下所示:
法)。如果你现在运行测试的话,它应该就能通过了。
XML文件中与其他的命名空间一起对其进行声明:
我们可以使用p-命名空间,按照以下的方式装配compactDisc属性
不过,BlankDisc这次完全通过属性
注入进行配置,而不是构造器注入。新的BlankDisc类如下所示: