开发者社区> rayner> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Spring_总结_03_装配Bean(三)之XML配置

简介: 一、前言 本文承接上一节:Spring_总结_03_装配Bean(二)之Java配置 上一节说到,当需要显示配置时,首选类型安全并且比XML更强大Java配置。 那什么时候使用XML配置呢? (1)维护已有XML配置 (2)想使用便利的XML命名空间,并且在JavaConfig中没有同样的实现。
+关注继续查看

一、前言

本文承接上一节:Spring_总结_03_装配Bean(二)之Java配置

上一节说到,当需要显示配置时,首选类型安全并且比XML更强大Java配置。

那什么时候使用XML配置呢?

(1)维护已有XML配置

(2)想使用便利的XML命名空间,并且在JavaConfig中没有同样的实现。

 

二、引入schema

<?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">


</beans>
View Code

用来装配bean的最基本的XML元素包含在spring-beans模式中,在上面这个XML文件中,它被定义为根命名空间。

<beans>是该模式中的一个元素,它是所有Spring配置文件的根元素。

 

三、声明Bean

    <bean id="compactDisc" class="soundsystem.SgtPeppers"></bean>

id :指定bean的名字,以便于被其他bean引用。

class : 全类名,指定创建bean的Class

 

注:

(1)通过xml配置的方式,我们不再直接负责创SgtPeppers,而在JavaConfig中,我们却是需要这样做的。当Spring发现 <bean>元素时,他会调用默认构造器来创建bean。

(2)将bean的类型以字符串的形式设置在class属性中,不便于重构。(如修改类名时)

 

 

四、构造器注入

注入bean有两种方式:

(1)构造器注入

(2)属性注入

 

这两种方式如何选择:强依赖选择构造器注入,可选性依赖使用属性注入。

 

1. constructor-arg

<?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">

    <bean id="compactDisc" class="soundsystem.SgtPeppers"></bean>

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

 

2. c-命名空间

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:c="http://www.springframework.org/schema/c"
       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">

    <bean id="compactDisc" class="soundsystem.SgtPeppers"></bean>
  
    <bean id="cdPlayer" class="soundsystem.CDPlayer"
          c:cd-ref="compactDisc"/>
    
    <bean id="cdPlayer2" class="soundsystem.CDPlayer"
          c:_0-ref="compactDisc"/>


</beans>
View Code

(1)构造器参数名

"c:"为命名空间

“-ref”表示注入引用

“cd”为构造器参数名

 

(2)构造器参数索引

“_i”为第i个参数。

表示为第i个参数注入bean

 

3. 字面量

将字面量注入到构造器中

(1)constructor-arg

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:c="http://www.springframework.org/schema/c"
       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">

    <bean id="blankDisc" class="soundsystem.BlankDisc">
        <constructor-arg value="字面量"/>
    </bean>



</beans>
View Code

 

(2)构造器参数名

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:c="http://www.springframework.org/schema/c"
       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">

    <bean id="blankDisc" class="soundsystem.BlankDisc"
          c:_title="标题"
          c:_author="作者" />

</beans>
View Code

 

(3)构造器参数索引

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:c="http://www.springframework.org/schema/c"
       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">

    <bean id="blankDisc" class="soundsystem.BlankDisc"
          c:_0="标题"
          c:_1="作者" />

</beans>
View Code

 

4. 集合

BlankDisc

public class BlankDisc  implements CompactDisc{
    private String title;
    private String author;
    private List<String> tracks;

    public BlankDisc(String title, String author, List<String> tracks) {
        this.title = title;
        this.author = author;
        this.tracks = tracks;
    }

    public void play(){
        System.out.print("aaaaaaaa");
    }
}
View Code

 

beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:c="http://www.springframework.org/schema/c"
       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">

    <bean id="compactDisc" class="soundsystem.BlankDisc">
        <constructor-arg value="标题"/>
        <constructor-arg value="作者"/>
        <constructor-arg>
            <list>
                <value>111111111</value>
                <value>222222222</value>
                <value>333333333</value>
                <value>444444444</value>
                <value>555555555</value>
            </list>
        </constructor-arg>
    </bean>

    <bean id="compactDisc2" class="soundsystem.BlankDisc">
        <constructor-arg value="标题"/>
        <constructor-arg value="作者"/>
        <constructor-arg>
            <list>
                <ref bean="compactDisc" />
                <ref bean="compactDisc" />
                <ref bean="compactDisc" />
                <ref bean="compactDisc" />
            </list>
        </constructor-arg>
    </bean>


    <bean id="compactDisc3" class="soundsystem.BlankDisc">
        <constructor-arg value="标题"/>
        <constructor-arg value="作者"/>
        <constructor-arg>
            <set>
                <value>111111111</value>
                <value>222222222</value>
                <value>333333333</value>
                <value>444444444</value>
                <value>555555555</value>
            </set>
        </constructor-arg>
    </bean>

</beans>
View Code

 

五、属性注入

1.注入引用

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:c="http://www.springframework.org/schema/c"
       xmlns:p="http://www.springframework.org/schema/p"
       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">

    <bean id="compactDisc" class="soundsystem.CompactDisc" />

    <bean id="cdPlayer" class="soundsystem.CDPalyer" >
        <property name="compactDisc" ref="compactDisc" />
    </bean>

    <bean id="cdPlayer2" class="soundsystem.CDPalyer"
          p:compactDisc-ref="compactDisc"/>

</beans>
View Code

 

2.注入字面量

BlankDisc

public class BlankDisc  implements CompactDisc{
    private String title;
    private String author;
    private List<String> tracks;

    public void setTitle(String title) {
        this.title = title;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public void setTracks(List<String> tracks) {
        this.tracks = tracks;
    }

    public void play(){
        System.out.print("aaaaaaaa");
    }
}
View Code

 

beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:c="http://www.springframework.org/schema/c"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/plugin"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/plugin http://www.springframework.org/schema/plugin/spring-plugin.xsd">

    <!--1.空属性-->
    <bean id="reallyBlankDisc" class="soundsystem.BlankDisc" />

    <!--2.注入list-->
    <bean id="compactBlankDisc" class="soundsystem.BlankDisc" >
        <property name="title" value="标题"/>
        <property name="author" value="作者"/>
        <property name="tracks" >
            <list>
                <value>11111111</value>
                <value>11111111</value>
                <value>11111111</value>
                <value>11111111</value>
            </list>
        </property>

    </bean>


    <!--3.p命名空间装配引用与装配字面量的唯一区别在于是否带有 -ref
          p命名空间不能用来装配集合
    -->
    <bean id="compactBlankDisc2" class="soundsystem.BlankDisc" 
          p:title="标题"
          p:author="作者">
        <property name="tracks" >
            <list>
                <value>11111111</value>
                <value>11111111</value>
                <value>11111111</value>
                <value>11111111</value>
            </list>
        </property>
    </bean>

    <!--4.<util:list>会创建一个列表bean -->
    <util:list id="tracklist">
        <value>1111111111</value>
        <value>1111111111</value>
        <value>1111111111</value>
        <value>1111111111</value>
    </util:list>
    <bean id="compactBlankDisc3" class="soundsystem.BlankDisc"
          p:title="标题"
          p:author="作者"
          p:tracks-ref="tracklist" />
</beans>
View Code

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring中Bean的生命周期
找工作的时候经常会被问道Spring中Bean的生命周期,其实也就是考察一下对Spring是否熟悉,工作中很少用到其中的内容,那我们简单看一下。
31 0
Spring中bean的生命周期
Spring中bean的生命周期
28 0
Spring中bean的生命周期(易懂版)
关于bean的生命周期有很多的文章,但是大多数都是长篇的理论,说来说去也不是很好理解,再次我就整理了一篇比较好理解的bean的生命周期,全文通过代码的形式形象的看到bean完整的生命周期,希望对你能有帮助!
27 0
Spring中Bean的生命周期
在Spring中,一个Bean的生命周期要经过很长的一段步骤,这也是面试中的高频考点,下面就一起来看看吧。
21 0
Spring Bean生命周期(下)
Spring Bean生命周期(下)
26 0
Spring Bean生命周期(上)
Spring Bean生命周期(上)
28 0
spring之Bean的生命周期
Bean的生命周期: Bean的定义——Bean的初始化——Bean的使用——Bean的销毁 Bean的定义 Bean 是 Spring 装配的组件模型,一切实体类都可以配置成一个 Bean ,进而就可以在任何其他的 Bean 中使用,一个 Bean 也可以不是指定的实体类,这就是抽象 Bean 。 Bean的初始化 Spring中bean的初始化回调有两种方法 一种是在配置文
1175 0
Spring Bean 生命周期(下)
Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。
27 0
+关注
338
文章
4
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载