Spring IOC容器基于配置文件装配Bean(2) ------通过setter或构造方法注入

复制代码
<?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:给配置的类起个后续在容器中获取用的id
    class:类所在的路径,通过反射的方式在IOC容器中创建bean,要求bean必须有无参构造方法
    -->
    <!--1、属性注入,通过setter方法注入,开发中最常用的注入方式-->
    <bean id="user" class="com.spring.cn.config.UserBean">
        <property name="username" value="liangd"/>
        <property name="age" value="23"/>
    </bean>

    <!--2、通过构造器方法注入-->
    <bean id="product" class="com.spring.cn.config.ProductBean">
        <!--  <constructor-arg value="36" index="2"/>
          <constructor-arg value="南极人" index="0"/>
          <constructor-arg value="保暖" index="1"/>-->
        <constructor-arg value="365" type="double"/>
        <constructor-arg value="保暖衣" type="java.lang.String"/>
        <constructor-arg value="保暖" type="java.lang.String"/>
    </bean>
    <!--如果IOC容器中有两个一样的bean,在获取bean时不能用Class来获取-->
    <!-- <config id="product1" class="com.spring.cn.beanProductBean">
         <constructor-arg value="36"/>
         <constructor-arg value="南极人"/>
         <constructor-arg value="保暖"/>
     </config>-->
    <!--不加参数根据构造器参数的顺序来赋值
        1、value  赋值
        2、index  参数下标
        3、type  类型
        4、name  名称
        5、ref  引用类型可以用ref,例如UserService,基本数据类型可以用value赋值,例如int、Long等
        使用构造器的注入的属性值可以指定参数的位置和参数的类型,来区分重载的构造器
      -->
    <bean id="product2" class="com.spring.cn.config.ProductBean">
        <constructor-arg value="秋裤" type="java.lang.String"/>
        <constructor-arg value="保暖" type="java.lang.String"/>
        <constructor-arg value="36" type="int"/>
    </bean>

    <!--
        value属性可以拿出来,如果有特殊字符,可以用<![CDATA[]]>处理
    -->
    <bean id="product3" class="com.spring.cn.config.ProductBean">
        <constructor-arg type="java.lang.String">
            <value><![CDATA[<南极人…^>]]></value>
        </constructor-arg>
        <constructor-arg value="保暖" type="java.lang.String"/>
        <constructor-arg value="36" type="int"/>
    </bean>

    <!--ref引用类型,指向配置好的Id名-->
    <bean id="company" class="com.spring.cn.config.CompanyBean">
        <property name="name" value="阿里巴巴"/>
        <property name="address" value="四川成都"/>
        <!--以下两种方式都可以-->
        <!--1、外部bean-->
        <!--<property name="productBean" ref="product3"/>-->
        <!--<property name="productBean">-->
            <!--<ref config="product3"/>-->
        <!--</property>-->
        <!--2、内部bean,可以不写id,不能被其它bean调用-->
        <property name="productBean">
            <bean class="com.spring.cn.config.ProductBean">
                <constructor-arg value="保暖衣"/>
                <constructor-arg value="保暖"/>
                <constructor-arg value="48" type="double"/>
            </bean>
        </property>
        <!--配置null-->
        <!--<property name="productBean"><null/></property>-->
        <!--级联属性赋值 注意:属性需要先初始化后才能为级联属性赋值,否则会有异常,和Struts2不同-->
        <property name="productBean.title" value="支付宝"/>
    </bean>

</beans>
复制代码

 

posted @   donleo123  阅读(90)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示