装配Bean—通过XML装配Bean
通过XML装配Bean:
尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的.
创建XML配置规范:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> </beans>
1.先前提过的@Bean的注解实现效果和如下的配置一样
<bean id="quest" class="QuestImpl"/>
2.借助构造器初始化Bean,有如下两种方式可以实现:
- <constructor-arg >元素名
- 使用Spring3.0所引入的c-命名空间
如下:
<bean id="braveKnight" class="BraveKnight" > <constructor-arg ref="quest"/> </bean>
<bean id="braveKnight" class="BraveKnight" c:quest-ref="quest"/>
装配集合,当我们需要往构造器中传入相应的多个参数的时候,我们可以使用集合来装相应的参数值,如下:
<!--注入BraveKnight--> <bean id="braveKnight" class="BraveKnight" ref="quest"> <constructor-arg> <list> <value>sgt</value> <value>Twinkle, twinkle, little start</value> </list> </constructor-arg> </bean>
我们也可以用<ref>元素代替<value>,实现bean的列表装配:
<!--注入BraveKnight--> <bean id="braveKnight" class="BraveKnight" ref="quest"> <constructor-arg > <list> <ref bean="quest"/> <ref bean="minstrel"/> </list> </constructor-arg> </bean>
当然我们也可以用同样的方式使用<Set>去装配
设置属性:
到目前为止,我们都是通过构造器来注入相关的成员变量的,没有使用属性的Setter方法,接下来我们就看下Spring XML如何实现属性注入:
<bean id="SgtPeppers" class="com.CDDemo.SgtPeppers"> <property name="title" value="sgt"/> <property name="song" value="Twinkle, twinkle, little start"/> </bean>
我们也可以使用p-命名空间的方式装配Bean:
<bean id="SgtPeppers" class="com.CDDemo.SgtPeppers" p:title="sgt" p:song="Twinkle, twinkle, little start"/>
我们还可以用<list>来盛装更多的被集合List包裹的参数值:
<property name="titleList"> <list> <value>Twinkle</value> <value>twinkle</value> <value>little start</value> </list> </property>
混合配置
当我们需要把几个类组合在一起的时候可以用@Import注解的方式:
@Component @Import(CDPlayerConfig.class) public class SgtPeppers implements CompactDisc { private String title = "sgt"; private String song = "Twinkle, twinkle, little start"; public void play() { System.out.println("title:" + title + "song:" + song); } }
@Component @Import({CDPlayerConfig.class,CDTest.class}) public class SgtPeppers implements CompactDisc { private String title = "sgt"; private String song = "Twinkle, twinkle, little start"; public void play() { System.out.println("title:" + title + "song:" + song); } }
如果需要引入配置中的Bean,则可以@ImportResource()中加入相应为配置文件的地址:
@Component @Import({CDPlayerConfig.class,CDTest.class}) @ImportResource("classpath:application.xml") public class SgtPeppers implements CompactDisc { private String title = "sgt"; private String song = "Twinkle, twinkle, little start"; public void play() { System.out.println("title:" + title + "song:" + song); } }
如果我们需要在一个XML中引入另一个XML的配置,可以使用<import resource>引入相关的配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--将application.xml引入进来--> <import resource="application.xml"/> </beans>