Ioc容器装配Bean(2)

注入参数:
        在sprintg配置文件中,用户不但可以将string,int 等字面值注入到Bean中,还可以将集合、Map等类型数据注入到Bean中,此外还可以在注入的配置文件中
定义其他Bean

        引用其他Bean:

                Spring IoC容器中定义的bean可以相互引用,IoC容器则充当红娘的作用。以下是创建一个新的Boss类,Boss类中拥有一个Car类型的属性:
                package com.baobaotao.attr;
                public class Boss{
                        private Car car;
                        public void setCar(Car car){
                                this.car=car;
                        }
                }

                bean的Bean通过<ref>元素引用car Bean,建立起boss对car的依赖:
                <!--car bean-->
                <!--<../>的作用是标记结束,是没有内容的等同于<..></..>-->
                <bean id="car" class="com.baobaotao.attr.Car"/>
                <bean id="boss" class="com.baobaotao.attr.Boss">
                        <property name="car">
                                <!--引用上面定义的car Bean-->
                                <ref bean="car"></ref>
                        </prperty>
                <bean>
                如果两个Bean分别在父子容器中,在子容器中想使用父容器中的Bean那么采用parent属性。
        内部Bean:
                如果car Bean 只被boss Bean 引用而不被其他的Bean引用,则可以使用内部Bean的方式注入到Boss中:
                <bean id="boss3" class="com.baobaotao.attr.Boss">
                        <property name="car">
                                <bean class="com.baobaotao.attr.Car">
                                        <property name="maxSpeed" value="200"/>
                                        <property name="price" value="2000.00"/>
                                </bean>
                        </property>
                </bean>
                内部Bean与Java中的内部类比较相似。
        null值:
                <property name="brand"><null/></property>
        级联属性:
                Spring支持级联属性的配置。假设我们希望在定义Boss时直接为Car的属性提供注入值,如下:
                <bean id="boss3" class="com.baobaotao.attr.Boss">
                        <property name="car.brand" value="吉利CT50"/>
                </bean>
                但这样必须对Boss类进行改造,为Car属性声明一个初始化对象:
               public class Boss{
                        private Car car=new Car();
                        public Car getCar(){
                                return car;
                        }
                        public void setCar(Car car){
                                this.car=car;
                        }
                }
        联合类型属性:
                List:
                public class Boss{
                        private List favorties=new ArrayList();
                        public List getFavorties(){
                                return favorties;
                        }
                        public void setFavorties(List favoties){
                                this.favorties=favorties;
                        }
                }
                配置:
                <bean id="boss1" class="com.baobaotao.attr.Boss">
                        <property name="favorties">
                                <list>
                                        <value>看报</value>
                                        <value>赛车</value>
                                        <value>高尔夫</value>
                                </list>
                        </property>
                </bean>

                Set配置:
                <bean id="boss1" class="com.baobaotao.attr.Boss">
                        <property name="favorties">
                                <set>
                                        <value>看报</value>
                                        <value>赛车</value>
                                        <value>高尔夫</value>
                                </set>
                        </property>
                </bean>
                Map配置:
                <bean id="boss1" class="com.baobaotao.attr.Boss">
                        <property name="favorties">
                                <map>
                                        <entry>
                                                <key>..</key>
                                                <value>??</value>
                                        </entry>
                                        <entry>
                                                <key>??</key>
                                                <value>??</value>
                                        </entry>
                                </map>
                        </property>
                </bean>
通过util命名空间配置集合类型的Bean:
        如果希望配置一个集合类型的Bean,而非一个集合类型的属性,则可以通过util命名空间进行配置,首先要在Spring配置文件头中引入util命名空间的声明
        xmln:xsi:"http://www.springframework.org/schema/uril"
        下面是配置集合类型的Bean:
                <util:list id="favortieList1" class="java.util.LinkedList">
                        <value>看报</value>
                        <value>赛车</value>
                        <value>高尔夫</value>
                </util:list>
        下面是一个配置set类型的Bean,可以通过set-class指定Set实现类:
                <util:set id="favortieSet1">
                        <value>看报</value>
                        <value>赛车</value>
                        <value>高尔夫</value>
                </util:set>
        最后是Map类型的Bean的配置,可以通过map-class指定Set实现类:
                <util:map id="favoriteMap1">
                        <entry key="AM" value="会见客户"/>
                        <entry key="PM" value="公司内部会议"/>
                </util:map>
简化配置方式:
        使用p命名空间:手下必须在spring配置文件中声明p命名空间:xlmn:p="http://www.springframework.org/schema/p"
       
<bean id="car1" class="com.baobaotao.attr.Car" p:brand="红旗&CA72" p:maxSpeed="200" p:price="20000.00"/>
 <bean id="boss" class="com.baobaotao.attr.Boss" p:car-ref="car"/>
       也就是说:对于字面属性p:<属性名>="xxx" 对于引用对象 p:<属性名>_ref="xxx"
自动装配:spring提供了Bean的自动装配机制
        <bean>元素提供了一个指定自动装配类型的属性:autowire="<自动装配类型>"。
        spring提供了4种装配类型:
                byName:根据名称自动进行装配
                byType:根据类型进行自动装配
                constructor:与ByType类似只不过是针对构造函数注入而言的
                aurodetect:根据Bean的自省机制决定采用byType还是constructor进行装配


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值