Spring基础:IoC容器(2)

容器注入类型

最常见的注入类型是字面值注入,像String和基本类型的包装类在Spring中都是有 属性编辑器帮助注入的。另外还有对象的注入,集合类的注入。

1.字面值
所谓字面值,一般是指可用字符串表示的值,这些值可以通过<value>元素标签进行注入。在默认情况下,基本数据类型及其封装类,String等类型都可以采取字面值注入的方式。
<bean id="car" class="com.firethewhole.maventest06.attr.Car">
    <property name="maxSpeed">
        <value>200</value>
    </property>
    <property name="brand">
        <value><![CDATA[红旗&CA72]]></value>
    </property>
    <property name="price">
        <value>2000.00</value>
    </property>
</bean>


****在XML中表示"<",">","&","""(双引号),"'"(单引号)这些的时候,要么使用<![CDATA[]]>包起来,要么使用转义序列。
特殊符号 转义序列
< &lt;
> &gt;
& &amp;
" &quot;
' &apos;


2.引用其他Bean
<bean id="boss" class="com.firethewhole.maventest06.attr.Boss">
    <property name="car">
        <ref bean="car"/>
    </property>
</bean>

<ref>元素可以通过以下三个属性引用容器中其他Bean。
  • bean:引用同一容器或父容器的Bean。
  • local:只能引用同一配置文件中的Bean。
  • parent:引用父容器中的Bean。

<?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 spring-beans-4.1.xsd">    
    <bean id="car" class="com.firethewhole.maventest06.attr.Car">
        <property name="brand" value="吉利CT5" />
        <property name="maxSpeed" value="100" />
        <property name="price" value="1000.00" />
    </bean>
    
    <bean id="boss2" class="com.firethewhole.maventest06.attr.Boss">
        <property name="car">
            <ref parent="car"/>
        </property>
    </bean>
</beans>

ApplicationContext ctx = new ClassPathXmlApplicationContext("beans1.xml");
ApplicationContext child = new ClassPathXmlApplicationContext(new String[] { "beans2.xml" }, ctx);
Boss boss2 = (Boss) child.getBean("boss2");
boss2.introduce();


3.引用内部Bean
<bean id="boss3" class="com.firethewhole.maventest06.attr.Boss">
    <property name="car">
        <bean class="com.firethewhole.maventest06.attr.Car">
            <property name="maxSpeed" value="300"/>
            <property name="brand" value="雷克萨斯"/>
            <property name="price" value="90000.00"/>
        </bean>
    </property>
</bean>


4.引用null值
如果确实要引入null值的话,需要使用标签<null/>

5.集合类型
主要有List,Set,Map,Props
<bean id="boss4" class="com.firethewhole.maventest06.attr.AnotherBoss">
    <property name="favorites">
        <list>
            <value>看报</value>
            <value>赛车</value>
            <value>高尔夫</value>
        </list>
    </property>
    <property name="jobs">
        <map>
            <entry>
                <key><value>AM</value></key>
                <value>会见客户</value>
            </entry>
            <entry>
                <key><value>PM</value></key>
                <value>公司内部会议</value>
            </entry>
        </map>
    </property>
    <property name="mails">
        <props>
            <prop key="jobMail">[email protected]</prop>
            <prop key="lifeMail">[email protected]</prop>
        </props>
    </property>
    <property name="jobTimes">
        <map>
            <entry>
                <key><value>会见客户</value></key>
                <value>124</value>
            </entry>
        </map>
    </property>
</bean>

****如果属性为Set类型,可以在配置文件中yong<set>替换掉<list>,泛型的集合类会判断注入类型,自动进行类型转换。

6.集合合并
这一块暂时跳过不写。

7.注入集合类型的Bean
如果希望注入集合类型的Bean,而不是集合类型的属性,则需要通过util命名空间进行配置。比如声明了集合类型的Bean之后,可以在属性中直接引用,不用采用上面的内部Bean的配置方式了。
引入命名空间xmlns:util="http://www.springframework.org/schema/util"
<util:list id="favoritieList" list-class="java.util.LinkedList">
    <value>看报</value>个
    <value>赛车</value>
    <value>高尔夫</value>
</util:list>
<util:set id="favoriteSet">
    <value>看报</value>
    <value>赛车</value>
    <value>高尔夫</value>
</util:set>
<util:map id="emailMap">
    <entry key="AM" value="会见客户"/>
    <entry key="PM" value="公司内部会议"/>
</util:map>

此外<util:list><util:set>还支持value-type,用于指定集合中元素的类型。<util:map>还支持key-type和value-type,指定Map中键和值的类型。

猜你喜欢

转载自foreversky12.iteye.com/blog/2337247