首页 > 其他分享 >Spring装配bean之通过 XML代码装配 bean

Spring装配bean之通过 XML代码装配 bean

时间:2022-09-01 23:56:09浏览次数:45  
标签:装配 XML Spring 配置 bean 组件

   在Spring中,对象无需自己查找和创建与其所关联的其他对象。相反,容易负责把需要相互协作的对象引用赋予各个对象。例如,一个订单管理的组件需要信用卡认证组件,但它不需要自己创建信用卡认证组件。订单管理组件只需要表明自己两手空空,容器就会主动赋予它一个信用卡认证组件。创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入(DI)的本质。
   Spring容器负责创建应用程序的bean并通过DI来协调这些对象之间的关系。但是,作为开发人员,你需要告诉Spring要创建那些bean并且如何将其装配在一起。当描述bean如何进行装配时,Spring具有非常大的灵活性,它提供了三种主要的装配机制:

  • 在XML中进行显式配置;
  • 在Java中进行显式配置;
  • 隐式的bean发现机制和自动装配;

1.通过 XML 装配 bean

   在 Spring 刚刚出现的时候,XML 是描述配置的主要方式。尽管长期以来确实与XML有着关联,但现在需要明确的是,XML不再是配置Spring的唯一的可选方案。Spring现在有了强大的自动化配置和基于Java的配置,XML不应该再是你的第一选择了。不过理解如何在Spring使用XML还是很重要的。希望你在新的项目中使用自动化配置和JavaConfig
最为简单的Spring 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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context" >



</beans>

很容易竟能看出,这个基本的XML配置以及比同等功能的JavaConfig类复杂得多了。作为起步,在JavaConfig中所需要的只是@Configuration,但在使用XML时,需要在配置文件的顶部声明多XML模式文件,这些文件定义了配置Spring的XML的元素

2.声明一个简单的

<?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
  http://www.springframework.org/schema/context" >
    <!-- <bean> 元素类似于 JavaCofig 中的 @Bean 注解。 -->
    <!-- 声明了一个很简单的 bean -->
    <!-- 因为没有明确给定ID,默认 soundsystem.SgtPeppers#0-->
    <!--  soundsystem.SgtPeppers #0-->
    <!--        包名.类名 “#0” 是一个计数的形式,用来区分相同类型的其他 bean -->
    <!-- 如果你声明了另外一个 SgtPeppers,并且没有明确进行标识,那么它自动得到的 ID 将会是 “soundsystem.SgtPeppers#1” -->

    <bean class="soundsystem.SgtPeppers" />


    <!-- 因为明确给定ID, 该Bean的ID为compactDisc-->
    <bean id="compactDisc" class="soundsystem.SgtPeppers" />

</beans>

3.借助构造器注入初始化bean

在SpringXml配置中,只有一种声明bean的方式:使用元素并指定class属性。Spring会从这里获取必要的信息来创建Bean。
但是在XML声明DI时,会有多种可选的配置方案和风格。具体到构造器注入,有两种基本的配置方案可供选择:

  • constructor-arg 元素
  • 使用 Spring 3.0 所引入的 c- 命名空间
<?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:c="http://www.springframework.org/schema/c"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context" >
    <!-- <bean> 元素类似于 JavaCofig 中的 @Bean 注解。 -->
    <!-- 声明了一个很简单的 bean -->
    <!-- 因为没有明确给定ID,默认 soundsystem.SgtPeppers#0-->
    <!--  soundsystem.SgtPeppers #0-->
    <!--        包名.类名 “#0” 是一个计数的形式,用来区分相同类型的其他 bean -->
    <!-- 如果你声明了另外一个 SgtPeppers,并且没有明确进行标识,那么它自动得到的 ID 将会是 “soundsystem.SgtPeppers#1” -->
    <bean id="sgtPeppers" class="soundsystem.SgtPeppers" />


    <!-- 因为明确给定ID, 该Bean的ID为compactDisc-->
    <bean id="compactDisc" class="soundsystem.SgtPeppers" />

    <bean id="cdPlayer" class="soundsystem.CDPlayer">
        <constructor-arg ref="compactDisc" />
    </bean>

    <!--代替方案你也可以使用c-命名空间和模式声明-->
    <!--模式声明 在顶部添加 xmlns:c="http://www.springframework.org/schema/c"-->
    <!-- c:cd-ref="compactDisc -->
    <!-- c:  cd  -ref="compactDisc -->
    <!-- cd  构造器参数名    CompactDisc cd
    public CDPlayer(CompactDisc cd){
        this.cd = cd;
    }
    -->
    <bean id="cdPlayer" class="soundsystem.CDPlayer" c:cd-ref="compactDisc" />

    <!--替代的方案是我们使用参数在整个参数列表中的位置信息:-->
    <!--该方法的第一个构造参数-->
    <bean id="cdPlayer" class="soundsystem.CDPlayer" c:_0-ref="compactDisc" />

    <!--将字面量注入到构造器中-->
    <bean id="compactDisc" class="soundsystem.BlankDisc"
          c:title="Sgt. Pepper's Lonely Hearts Club Band"
          c:artist="The Beatles" />

    <bean id="compactDisc" class="soundsystem.BlankDisc">
        <constructor-arg value="Sgt. Pepper's Lonely Hearts Club Band" />
        <constructor-arg value="The Beatles" />
    </bean>

    <bean id="compactDisc" class="soundsystem.BlankDisc"
          c:_0="Sgt. Pepper's Lonely Hearts Club Band"
          c:_1="The Beatles" />

    <!--装配集合 构造器 list-->
    <bean id="compactDisc"
          class="soundsystem.BlankDisc"
          c:_0="Sgt. Pepper's Lonely Hearts Club Band"
          c:_1="The Beatles">
        <constructor-arg>
            <list>
                <value>Sgt. Pepper's Lonely Hearts Club Band</value>
                <value>With a Little Help from My Friends</value>
                <value>Lucy in the Sky with Diamonds</value>
                <value>Getting Better</value>
                <value>Fixing a Hole</value>
            </list>
        </constructor-arg>
    </bean>

    <!--装配集合 构造器 set-->
    <bean id="compactDisc" class="soundsystem.BlankDisc" >
        <constructor-arg value="Sgt. Pepper's Lonely Hearts Club Band" />
        <constructor-arg value="The Beatles" />
        <constructor-arg>
            <set>
                <value>Sgt. Pepper's Lonely Hearts Club Band</value>
                <value>With a Little Help from My Friends</value>
                <value>Lucy in the Sky with Diamonds</value>
                <value>Getting Better</value>
                <value>Fixing a Hole</value>
                <!-- ...other tracks omitted for brevity... -->
            </set>
        </constructor-arg>
    </bean>



   <!--假设你的构造器如下 public Discography(String artist, List<CompactDisc> cds) { ... }-->
    <bean id="beatlesDiscography"
          class="soundsystem.Discography" >
        <constructor-arg value="Sgt. Pepper's Lonely Hearts Club Band"/>
        <constructor-arg>
            <list>
                <ref bean="sgtPeppers" />
                <ref bean="whiteAlbum" />
                <ref bean="hardDaysNight" />
                <ref bean="revolver" />
            </list>
        </constructor-arg>
    </bean>

</beans>


标签:装配,XML,Spring,配置,bean,组件
From: https://www.cnblogs.com/guohongzhi/p/16648062.html

相关文章