• 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>
    作者:donleo123
    本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。
  • 相关阅读:
    高精准加法和乘法
    高精度加法
    病毒!!!!
    真真真·高精度乘法!!!!!
    急训 Day 1 (2)
    UVA Open Credit System Uva 11078
    SPOJ 375 Query on a tree 树链剖分模板
    安卓数据包的传递 Bundle
    Android studio 如何在Activity之间传递简单的数据
    java关系运算中的控制和使用
  • 原文地址:https://www.cnblogs.com/donleo123/p/14069243.html
Copyright © 2020-2023  润新知