定西建设厅网站,wordpress调用post的发布时间,网站建设原创,定制软件开发企云云尽管Spring长期以来确实与XML有着关联#xff0c;但现在需要明确的是#xff0c;XML不再是配置Spring的唯一可选方案。Spring现在有了强大的自动化配置和基于Java的配置#xff0c;XML不应该再是你的第一选择了。不过#xff0c;鉴于已经存在那么多基于XML的Spring配置但现在需要明确的是XML不再是配置Spring的唯一可选方案。Spring现在有了强大的自动化配置和基于Java的配置XML不应该再是你的第一选择了。不过鉴于已经存在那么多基于XML的Spring配置所以理解如何在Spring中使用XML还是很重要的。但是我希望本节的内容只是用来帮助你维护已有的XML配置在完成新的Spring工作时希望你会使用自动化配置和JavaConfig。1.1创建XML配置规范在使用XML为Spring装配bean之前你需要创建一个新的配置规范。在使用JavaConfig的时候这意味着要创建一个带有Configuration注解的类而在XML配置中这意味着要创建一个XML文件并且要以元素为根。很容易就能看出来这个基本的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的菜单中选择FileNewSpring Bean Configuration File能够创建SpringXML配置文件并且可以选择可用的配置命名空间。1.2声明一个简单的要在基于XML的Spring配置中声明一个bean我们要使用spring-beans模式中的另外一个元素。元素类似于JavaConfig中的Bean注解。我们可以按照如下的方式声明CompactDiscbean这里声明了一个很简单的bean创建这个bean的类通过class属性来指定的并且要使用全限定的类名。因为没有明确给定ID所以这个bean将会根据全限定类名来进行命名。在本例中bean的ID将会是“soundsystem.SgtPeppers#0”。其中“#0”是一个计数的形式用来区分相同类型的其他bean。如果你声明了另外一个SgtPeppers并且没有明确进行标识那么它自动得到的ID将会是“soundsystem.SgtPeppers#1”。尽管自动化的bean命名方式非常方便但如果你要稍后引用它的话那自动产生的名字就没有多大的用处了。因此通常来讲更好的办法是借助id属性为每个bean设置一个你自己选择的名字1.3借助构造器注入初始化bean在Spring XML配置中只有一种声明bean的方式使用元素并指定class属性。Spring会从这里获取必要的信息来创建bean。但是在XML中声明DI时会有多种可选的配置方案和风格。具体到构造器注入有两种基本的配置方案可供选择构造器注入bean引用按照现在的定义CDPlayerbean有一个接受CompactDisc类型的构造器。这样我们就有了一个很好的场景来学习如何注入bean的引用。现在已经声明了SgtPeppers bean并且SgtPeppers类实现了CompactDisc接口所以实际上我们已经有了一个可以注入到CDPlayerbean中的bean。我们所需要做的就是在XML中声明CDPlayer并通过ID引用SgtPeppers当Spring遇到这个元素时它会创建一个CDPlayer实例。元素会告知Spring要将一个ID为compactDisc的bean引用传递到CDPlayer的构造器中。作为替代的方案你也可以使用Spring的c-命名空间。c-命名空间是在Spring 3.0中引入的它是在XML中更为简洁地描述构造器参数的方式。要使用它的话必须要在XML的顶部声明其模式如下所示在c-命名空间和模式声明之后我们就可以使用它来声明构造器参数了如下所示迄今为止我们所做的DI通常指的都是类型的装配——也就是将对象的引用装配到依赖于它们的其他对象之中——而有时候我们需要做的只是用一个字面量值来配置对象。为了阐述这一点假设你要创建CompactDisc的一个新实现如下所示在SgtPeppers中唱片名称和艺术家的名字都是硬编码的但是这个CompactDisc实现与之不同它更加灵活。像现实中的空磁盘一样它可以设置成任意你想要的艺术家和唱片名。现在我们可以将已有的SgtPeppers替换为这个类我们再次使用元素进行构造器参数的注入。但是这一次我们没有使用“ref”属性来引用其他的bean而是使用了value属性通过该属性表明给定的值要以字面量的形式注入到构造器之中。如果要使用c-命名空间的话这个例子又该是什么样子呢第一种方案是引用构造器参数的名字在装配bean引用和字面量值方面和c-命名空间的功能是相同的。但是有一种情况是能够实现c-命名空间却无法做到的。接下来让我们看一下如何将集合装配到构造器参数中。首先可以使用元素将其声明为一个列表当list中元素是引用类型时1.4设置属性到目前为止CDPlayer和BlankDisc类完全是通过构造器注入的没有使用属性的Setter方法。接下来我们就看一下如何使用Spring XML实现属性注入。假设属性注入的CDPlayer如下所示元素为属性的Setter方法所提供的功能与元素为构造器所提供的功能是一样的。在本例中它引用了ID为compactDisc的bean(通过ref属性)并将其注入到compactDisc属性中(通过setCompactDisc()方法)。如果你现在运行测试的话它应该就能通过了。我们已经知道Spring为元素提供了c-命名空间作为替代方案与之类似Spring提供了更加简洁的p-命名空间作为元素的替代方案。为了启用p-命名空间必须要在XML文件中与其他的命名空间一起对其进行声明我们可以使用p-命名空间按照以下的方式装配compactDisc属性不过BlankDisc这次完全通过属性注入进行配置而不是构造器注入。新的BlankDisc类如下所示