在ioc容器中给复杂属性赋值

还是上次的Person对象,里面有几个属性

	private String lastname;
    private Integer age;
    private String gender;
    private String email;

1.在组件中给类赋值
在Person类中增加属性Car,然后在注册中为Car赋值

private Car car;

在这里展示两种方式:
一种是引用外部的注册的组件,然后使用该组件的引用,但是这个是严格的引用,引用类赋值改变,这个也会跟着变
一种是直接在这里面写一个内部组件,这个组件是基本不会改变的。
(内部组件写id也没有用,不能被外部直接通过getBean方法获取)

<bean id="car01" class="com.lzt.bean.Car">
        <property name="carName" value="baoma"></property>
        <property name="color" value="baise"></property>
        <property name="price" value="300000"></property>
    </bean>
	<bean id = "person01" class="com.lzt.bean.Person">
        <property name="lastname">
            <!-- 进行复杂赋值  -->
            <null></null>
        </property>
        <!-- ref代表引用外面的值   这个是严格的引用 引用类变了,这个也会跟着变-->
        <!--<property name="car" ref="car01"></property>-->
        <property name="car">
            <!-- 对象也可以直接通过bean创建 -->
            <bean class="com.lzt.bean.Car">
                <property name="carName" value="aodi"></property>
                <property name="price" value="100000"></property>
            </bean>
        </property>
    </bean>

2.在组件中给List对象赋值

private List<Book> books;

在property属性中给list赋值,使用<list>标签,使用时相当于创建了一个新的LIst,list中可以注册多个bean,可以看到内部创建和外部引用的Book对象。

<property name="books">
            <!-- books = new List<>(); -->
            <list>
                <!-- 内部创建 内部创建的bean不能被获取到 -->
                <bean id="bookInner" class="com.lzt.bean.Book">
                    <property name="bookName" value="xiyouji"></property>
                </bean>
                <!-- 外部引用 -->
                <ref bean="book01"></ref>
            </list>
        </property>

3.在组件中给map赋值

private Map<String,Object> maps;

在map中加入任意个entry,一个entry代表一个键值对,value中可以使用引用,或者注册简单或者复杂的属性。

<!-- private Map<String,Object> maps -->
        <property name="maps">
            <!-- maps = new LinkedHashMap<>(); -->
            <map>
                <!-- 一个entry代表一个键值对 -->
                <entry key="key01" value="zhangsan"></entry>
                <entry key="key02" value="18"></entry>
                <entry key="key03" value-ref="book01"></entry>
                <entry key="key04">
                    <bean class="com.lzt.bean.Car">
                        <property name="carName" value="sdads"></property>
                    </bean>
                </entry>
                <entry key="key05"><map></map></entry>
            </map>
        </property>

4.在组件中给Properties赋值

private Properties properties;

Properties就是key-value都是String类型的Map

</property>
        <property name="properties">
            <!-- properties = new Properties(); 所有key value都为String-->
            <props>
                <!-- 所有key value都为String 值直接写在标签体中-->
                <prop key="username">root</prop>
                <prop key="password">111111</prop>
            </props>
        </property>

5.想要在bean外面单独注册集合属性的话,可以使用util标签
比如这个util:map就是在外面单独注册一个map

    <!-- util名称空间创建集合类型的bean 方便引用-->
    <bean class="com.lzt.bean.Person" name="person03">
        <property name="maps" ref="myMap"></property>
    </bean>
    <util:map id="myMap">
        <!-- 添加元素 -->
        <entry key="key01" value="hahahah"></entry>
    </util:map>

猜你喜欢

转载自blog.csdn.net/weixin_38857307/article/details/109580515
今日推荐