spring学习-2 Bean的装配

2 篇文章 0 订阅

Spring 支持 3 种依赖注入的方式
属性注入
构造方法注入
工厂方法注入

属性注入:
属性注入即通过 setter 方法注入Bean 的属性值或依赖的对象
属性注入使用 <property> 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 <value> 子节点指定属性值
属性注入是实际应用中最常用的注入方式
注意:类必须具有显式或隐式的无参构造方法
Bean的名称可以使用id或者name,同一个Bean中id和name可以一样,也可以不一样,但是不同Bean的id和name不能重复

    <bean id="s1" name="s1" class="com.han.vo.Student"> 
        <property name="id" value="1"></property>
        <property name="name">
            <value>韩少斌</value>
        </property>
        <property name="phone">
            <value>4567890</value>
        </property>
    </bean> 

构造方法注入:
通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用。
构造器注入在 <constructor-arg > 元素里声明属性

index属性用来标识是第几个参数的,默认可以不写,按照构造方法的参数顺序
type属性用来标识该参数的类型,一般也不用写,在遇到有参数个数相同的构造方法时使用

    <bean id="s2" class="com.han.vo.Student"> 
        <constructor-arg value="2" index="0" type="int"></constructor-arg>
        <constructor-arg index="2" type="String">
            <value>57890986</value>
        </constructor-arg>
        <constructor-arg index="1">
            <value>尼古拉斯-赵四</value>
        </constructor-arg>
    </bean>  

工厂注入:
工厂注入分为静态工厂和实例工厂
这里写图片描述

dog为静态工厂注入,class属性指定工厂类,factiory-method指定返回实例的方法

cat为实例工厂注入,首先要配置实例工厂类的Bean,配置cat Bean时,用factory-bean来指定工厂Bean,仍然使用factory-method指定返回实例的方法

这里写图片描述

引用其它Bean
在注入时,若属性是其他Bean,则可以通过 <ref> 元素或 ref 属性为 Bean 的属性或构造方法参数指定对 Bean 的引用.

    <bean id="teacher" name="teacher0"  class="com.han.vo.Teacher">
        <property name="name" value="韩少斌"></property>
        <property name="student" ref="s1"></property>
    </bean>
    <bean id="teacher0" name="teacher0"  class="com.han.vo.Teacher">
        <property name="name" value="韩少斌"></property>
        <property name="student">
            <ref bean="s1"/>
        </property>
    </bean>

内部 Bean
当 Bean 实例仅仅给一个特定的属性使用时, 可以将其声明为内部 Bean. 内部 Bean 声明直接包含在 <property> 或 <constructor-arg> 元素里, 不需要设置任何 id 或 name 属性
内部 Bean 不能在任何其他地方使用

    <bean id="teacher1" name="teacher1"  class="com.han.vo.Teacher">
        <property name="name" value="韩少斌"></property>
        <property name="student">
            <bean id="liyuanpeng" class="com.han.vo.Student">
                <property name="id" value="3"></property>
                <property name="name" value="李元鹏"></property>
                <property name="phone" value="110"></property>
            </bean>
        </property>
    </bean>

集合属性:

在 Spring中可以通过一组内置的 xml 标签(例如: <list>, <set> 或 <map>) 来配置集合属性.
配置 java.util.List 类型的属性, 需要指定 <list> 标签, 在标签里包含一些元素. 这些标签可以通过 <value> 指定简单的常量值, 通过 <ref> 指定对其他 Bean 的引用.
数组的定义和 List 一样, 都使用<list>

配置 java.util.Set 需要使用 <set> 标签, 定义元素的方法与 List 一样.

Java.util.Map 通过 <map> 标签定义, <map> 标签里可以使用多个 <entry> 作为子标签. 每个条目包含一个键和一个值.
必须在 <key> 标签里定义键,因为键和值的类型没有限制, 所以可以自由地为它们指定 <value>, <ref>, <bean> 或 <null> 元素.
可以将 Map 的键和值作为 <entry> 的属性定义: 简单常量使用 key 和 value 来定义; Bean 引用通过 key-ref 和 value-ref 属性定义
使用 <props> 定义 java.util.Properties, 该标签使用多个 <prop> 作为子标签. 每个 <prop> 标签必须定义 key 属性.

    <bean name="manager" class="com.han.vo.Manager">
        <property name="name" value="饲养员"></property>
        <property name="students">
            <list>
                <ref bean="s1"/>
                <ref bean="s2"/>
                <ref bean="s3"/>
                <bean class="com.han.vo.Student">
                    <property name="id" value="4"></property>
                    <property name="name" value="苏艳"></property>
                    <property name="phone" value="114"></property>
                </bean>
            </list>
        </property>
        <property name="teachers">
            <set>
                <ref bean="teacher0"/>
                <ref bean="teacher1"/>
                <ref bean="teacher2"/>
                <ref bean="teacher3"/>

            </set>
        </property>
        <property name="ms">
            <map>
                <entry key="student1" value-ref="s1"></entry>
                <entry key="student2" value-ref="s2"></entry>
                <entry key="student3" value-ref="s3"></entry>
            </map>
        </property>

        <property name="properties">
            <props>
                <prop key="driverClass">com.mysql.jdbc.Driver</prop>
                <prop key="url">jdbc:mysql://localhost:3306/mybd</prop>
                <prop key="user">root</prop>
                <prop key="password">************</prop>
            </props>
        </property>
    </bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值