第2章—装配Bean—通过XML装配Bean

通过XML装配Bean

​ 尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的.

3.1创建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>去装配

3.2.设置属性

​ 到目前为止,我们都是通过构造器来注入相关的成员变量的,没有使用属性的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>

3.3.混合配置

当我们需要把几个类组合在一起的时候可以用@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>
上一篇:HTML 常问面试题 知识点(一)


下一篇:第3章—高级装配—bean的作用域