正確給各種類型的屬性賦值


基本類型直接使用
<property name="name" value="jack"></property>自動進行類型轉換
進行復雜賦值時
<property name="name" >
     <value></value>
</property>
 
引用類型賦值(引用其他bean,引用內部bean)
 
<bean id="car01" class="com.lmh.bean.Car">
        <property name="carName"  value="bmw"></property>
        <property name="color"  value="black"></property>
        <property name="price"  value="30000"></property>
</bean>
<bean id="person06" class="com.lmh.bean.Person">
        <!-- ref:代表引用外部的bean
            car = ioc.getBean("car01")-->
           <property name="car" ref="car01"></property>
        <property name="car">
        <!-- 對象我們可以使用bean標簽創建 car = new  Car()   引用內部bean,不能被獲取,只能內部使用,內部類添加id屬性,不能被調用 -->
            <bean class="com.lmh.bean.Car">
                <property name="carName"  value="audi"></property>
            </bean>
        </property>
 </bean>
 
<!-- 通過p名稱空間為bean賦值 -->
    <!-- 名稱空間:在xml中名稱空間是用來防止標簽重復  -->
    <!-- 1)導入p名稱空間 2)寫帶前綴的標簽/屬性 -->
    <bean id="person05"  class="com.lmh.bean.Person" p:name="xiaohei"
        p:age="18" p:gender="male"  p:email="xiaohei@qq.com"></bean>
 
 
<!-- 注冊一個person對象 Spring自動創建person對象  -->
    <!-- 一個Bean標簽可以注冊一個組件(對象)  class:寫要注冊的組件的全類名 id: 這個對象的唯一標識  -->
    <bean id="person01"  class="com.lmh.bean.Person">
        <!-- 使用property給對象的屬性進行賦值
        name: 指定屬性名
        value: 為屬性賦值
        -->
        <property name="name"  value="tom"></property>
        <property name="gender"  value="man"></property>
        <property name="age"  value="18"></property>
        <property name="email"  value="tom@qq.com"></property>
    </bean>
 
<!--調用有參構造方法進行對象創建並賦值 不使用getter  和setter方法賦值 -->
    <bean id="person03"  class="com.lmh.bean.Person">
        <constructor-arg name="name"  value="petter"></constructor-arg>
        <constructor-arg name="age"  value="22"></constructor-arg>
        <constructor-arg name="gender"  value="male"></constructor-arg>
        <constructor-arg name="email"  value="petter@qq.com"></constructor-arg>
    </bean>
    <!-- index 屬性為參數指定索引 -->
    <!-- 重載的情況下使用type 為參數指定數據類型 -->
    <bean id="person04"  class="com.lmh.bean.Person">
        <constructor-arg name="name"  value="petter" index="0"
            type="java.lang.Integer"></constructor-arg>
        <constructor-arg name="age"  value="22"></constructor-arg>
        <constructor-arg name="gender"  value="male"></constructor-arg>
        <constructor-arg name="email"  value="petter@qq.com"></constructor-arg>
    </bean>
 
<!-- 通過p名稱空間為bean賦值 -->
<!-- 名稱空間:在xml中名稱空間是用來防止標簽重復 -->
<!-- 1)導入p名稱空間 2)寫帶前綴的標簽/屬性 -->
    <bean id="person05"  class="com.lmh.bean.Person" p:name="xiaohei"
        p:age="18" p:gender="male"  p:email="xiaohei@qq.com"></bean>
 
<bean id="book001" class="com.lmh.bean.Book"  p:name="圍城" p:author="錢鍾書"></bean>
    <bean id="person001"  class="com.lmh.bean.Person">
        <!-- 如何給list類型賦值 -->
        <property name="books">
            <list>
                <!-- list標簽體中添加每一個元素  -->
                <bean id="book00001"  class="com.lmh.bean.Book" p:name="西游記"
                    p:author="吳承恩"></bean>
                <!-- 引用一個外部元素 -->
                <ref bean="book001" />
            </list>
        </property>
    </bean>
 
 
 
<!-- 如何給map類型賦值 -->
<property name="maps">
            <!-- maps = new LinkHashMap(); -->
            <map>
                <!-- 一個entry相當於一個鍵值對 -->
                <entry key="key01" value="張三"></entry>
                <!-- 引用外部bean -->
                <entry key="key02"  value-ref="book001"></entry>
                <!-- 內部創建bean對象 -->
                <entry key="key03">
                    <bean  class="com.lmh.bean.Car">
                        <property name="carName"  value="奔馳"></property>
                    </bean>
                </entry>
                <!-- 一個map即{1,1,{}} -->
                <entry key="key04">
                    <map></map>
                </entry>
            </map>
        </property>
<!-- 如何給property類型賦值 -->
        <property name="properties">
            <!-- props = new Properties 所有的k=v 都是string -->
            <props>
                <prop key="username">root</prop>
                <prop key="password">root</prop>
            </props>
        </property>
 
 
<
<bean class="com.lmh.bean.Person">
        <property name="maps"  ref="myUtilmap"></property>   引用util:map
    </bean>
    <!-- util名稱空間創建集合類型的bean:方便別人引用 -->
        <util:map id="myUtilmap">
        <!-- 添加元素 -->
            <!-- 一個entry相當於一個鍵值對 -->
                <entry key="key01" value="張三"></entry>
                <!-- 引用外部bean -->
                <entry key="key02"  value-ref="book001"></entry>
                <!-- 內部創建bean對象 -->
                <entry key="key03">
                    <bean  class="com.lmh.bean.Car">
                        <property name="carName"  value="奔馳"></property>
                    </bean>
                </entry>
        </util:map>
            
            <!--list中的元素:  [ [],person,23,{}     ]  -->
        <util:list id="mylist">
            <list></list>
            <bean  class="com.lmh.bean.Person"></bean>
            <value>23</value>
            <ref bean="myMap"/>
        </util:list>
 
<!-- 級聯屬性: 屬性的屬性 -->
        <bean id="person04"  class="com.lmh.bean.Person">
        <!-- 為car賦值的時候,改變car的價格 -->
        <property name="car"  ref="car01"></property>
        <property name="car.price"  value="90000"></property>
        </bean>
 
 
 
     <bean id="per01"  class="com.lmh.bean.Person">
        <property name="name"  value="bmw"></property>
        <property name="age"  value="22"></property>
        <property name="gender"  value="30000"></property>
    </bean>
    <!--parent: 指定當前bean的配置信息繼承於那個  只需修改需要修改的屬性即可  -->
    <bean id="per02" class="com.lmh.bean.Person"  parent="per01">
    <property name="name" value="奧拓"></property>
    </bean>
 
<bean id="per01" class="com.lmh.bean.Person"  abstract="true">
<!-- abstract="true"  這個bean的配置是一個抽象的,不能獲取實例。只能被別人用來繼承 -->
獲取時會報錯
Person person01 = (Person) ioc.getBean("per01");
            System.out.println(person01);
            /**
             *  org.springframework.beans.factory.BeanIsAbstractException:
             * Error creating bean with name  'per01':
             * Bean definition is abstract
             */
 
<bean id="person04"  class="com.lmh.bean.Person" scope="singleton" init-method="init" destroy-method="destroy">
上面的bean標簽除了id和class兩個屬性外,還有其他屬性,這里我們介紹scope、init_method和destroy-method;
當沒有設置scope屬性為“singleton”時,當我們每次通過Spring容器的getBean方法獲取IntrduceDemo實例時,得到的都是相同的一個實例; 與singleton對應的是prototype,如果將scope屬性設置為prototype,得到的就是不同的實例對象
<!-- 測試bean的作用域,分別創建單實例和多實例的bean
    bean的作用域:指定的bean是否單實例,xxx;默認: 單實例的
    scope屬性的值:
        prototype:多實例的
            1)、 容器啟動默認不會去創建多實例bean
            2)、獲取的時候創建這個bean對象
            3)、每次獲取都會創建一個新的
        singleton:單實例,(默認的 )配置文件默認狀態
            1)、 在容器啟動完成之前已經創建好對象,保存在容器中
            2)、任何獲取都是在獲取之前創建對象
        request: 在web環境下,同一次請求創建一個bean對象(沒用)
        session: 在web環境下,同一次會話創建一個bean對象(沒用)
             -->
靜態工廠與實例工廠
 
 
 
<bean id="book"  class="com.lmh.bean.Book"></bean>
    <!--配置通過靜態工廠方法創建的bean、實例工廠方法創建的bean、FactoryBean  -->
    <!--bean的創建默認就是框架利用反射new出來的bean實例  -->
    <!--工廠模式:工廠幫我們創建對象:有一個專門幫我們創建對象的類,這個類就是工廠
        AirPlane ap =  AirPlaneFactory.getairplane(String jzName);
        
        靜態工廠: 工廠不用創建對象,通過靜態方法調用, 對象 = 工廠類.工廠方法名();
        實例工廠:工廠本身需要創建對象;
        工廠類 工廠對象 = new 工廠類();
        工廠對象.getAirPlane(“張三”);
      -->
        
        <!--靜態工廠(不需要創建工廠本身)
        class:指定靜態工廠全類名
        factory-method:指定哪個方法是工廠方法  
        constructor-arg:可以為方法傳遞參數
        -->
        <bean id="airplane01"  class="com.lmh.factory.AirPlaneStaticFactory"
        factory-method="getAirPlane">
            <constructor-arg  value="wangba"></constructor-arg>
        </bean>
    
        <bean id="airPlaneInstanceFactory"
        class="com.lmh.factory.AirPlaneInstanceFactory"></bean>
 
    
實現factorybean的工廠
<!--factory-bean:指定當前對象創建使用那個工廠
            1.先配置出實例工廠對象
            2.配置我們要創建的Airplane使用那個工廠創建
                1)、
          -->
        <bean id="airplane02"  class="com.lmh.bean.AirPlane"
        factory-bean="airPlaneInstanceFactory"
        factory-method="getAirPlane"
        >
        <constructor-arg  value="wangwu"></constructor-arg>
        </bean>
    
    
    <!--FactoryBean(是spring規定的一個接口)  
        只要實現這個接口,Spring都認為是一個工廠
        1.容器創建的時候,並不會創建這個實例
        2.FactoryBean獲取的時候才創建對象
    -->
    <bean id="myFactoryBeanImple"  class="com.lmh.factory.MyFactoryBeanImple"></bean>
 
 
 
 
<!-- 創建帶有生命周期方法的bean 生命周期:bean的創建到銷毀:
    ioc容器中注冊的bean:
        1)、單實例bean,容器啟動的時候就會創建好,容器關閉也會銷毀創建的bean
        2)、多實例bean,獲取的時候才創建; 我們可以為bean自定義一些生命周期方法;
        Spring在創建或者銷毀的時候就會調用指定的方法;  自定義初始化方法和銷毀方法。 -->
    <bean id="book01" class="com.lmh.bean.Book"
    destroy-method="bookDestory"  init-method="bookInit"
    scope="prototype"></bean>
 
 
實體類中對應的方法:
 
創建MyBeanPostProcessor類 繼承 BeanPostProcessor接口,實現對應的方法
    <!-- 測試bean的后置處理器  BeanPostProcessor
    Spring有一個接口,后置處理器,可以在bean的初始化前后調用方法
    -->
    /**
     * Bean的生命周期:
     *     (容器啟動)構造器-->初始化方法-->(容器關閉)銷毀方法
     *    
     *    多實例:獲取bean(構造器-->初始化方法)-->容器關閉不會調用bean 的銷毀方法
     *    
     *    后置處理器:
     *           (容器啟動)構造器----后置處理器before -----> 初始化方法--->后置處理器after--->bean初始化完成
     *    無論bean是否有初始化方法,后置處理器都會默認其有,還會繼續工作
     */
    <bean id="book01" class="com.lmh.bean.Book"
    destroy-method="bookDestory"  init-method="bookInit"
    scope="singleton"></bean>
    <bean id= "beanpostprocessor"  class="com.lmh.bean.MyBeanPostProcessor"></bean>
    </beans>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM