1. 程式人生 > >Spring_(4)屬性配置細節之二

Spring_(4)屬性配置細節之二

集合屬性

  • 在Spring中可以通過一組內建的xml標籤(例如:,或)來配置集合屬性。
  • 配置java.util.List型別的屬性,需要指定標籤,在標籤裡包含一些元素,這些標籤可以通過指定簡單的常量值,通過指定對其他Bean的引用,通過指定內建Bean定義。通過指定空元素,甚至可以內嵌其他集合。
  • 陣列的定義和List一樣,都使用。
  • 配置java.util.Set需要使用標籤,定義元素的方法與List一樣。
  • java.util.Map通過標籤定義,標籤裡可以使用多個作為子標籤,每個條目包含一個鍵和一個值。
  • 必須在標籤裡定義鍵。
  • 因為鍵和值的型別沒有限制,所以可以自由地為它們指定,,或元素。
  • 可以將Map的鍵和值作為的屬性定義:簡單常量使用key和value來定義;Bean引用通過key-ref和value-ref屬性定義。
  • 使用定義java.util.Properties,該標籤使用多個作為子標籤,每個標籤必須定義key屬性。

使用utility scheme定義集合

  • 使用基本的集合標籤定義集合時,不能將集合作為獨立的Bean定義,導致其他Bean無法引用該集合,所以無法在不同Bean之間共享集合
  • 可以使用util schema裡的集合標籤定義獨立的結合Bean,需要注意的是,必須在根元素裡新增util schema定義

使用p名稱空間

  • 為了簡化xml檔案的配置,也來越多的xml檔案採用屬性而非子元素配置資訊。
  • Spring從2.5版本開始引入了一個新的p名稱空間,可以通過元素屬性的方式配置Bean的屬性。
  • 使用p名稱空間後,基於XML的配置方式將進一步簡化

例子演示:

程式的整體結構

在這裡插入圖片描述

主要的java類和xml配置檔案

Car.java

package com.spring.beans;

public class Car {

    private String brand;
    private String corp;
    private double price;
private int maxSpead; public Car(String brand,String corp,double price){ super(); this.brand = brand; this.corp = corp; this.price = price; } public Car(String brand,String corp,int maxSpead){ super(); this.brand = brand; this.corp = corp; this.maxSpead = maxSpead; } public void setPrice(double price) { this.price = price; } public void setMaxSpead(int maxSpead) { this.maxSpead = maxSpead; } @Override public String toString() { return "Car{" + "brand='" + brand + '\'' + ", corp='" + corp + '\'' + ", price=" + price + ", maxSpead=" + maxSpead + '}'; } }

Person.java

package com.spring.beans.collections;

import com.spring.beans.Car;

import java.util.List;

public class Person {

    private  String name;
    private int age;
    private List<Car> cars;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public List<Car> getCars() {
        return cars;
    }

    public void setCars(List<Car> car) {
        this.cars = car;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", cars=" + cars +
                '}';
    }


}

NewPerson.java

package com.spring.beans.collections;

import com.spring.beans.Car;

import java.util.Map;

public class NewPerson {

    private String name;
    private int age;

    private Map<String,Car> cars;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Map<String, Car> getCars() {
        return cars;
    }

    public void setCars(Map<String, Car> cars) {
        this.cars = cars;
    }

    @Override
    public String toString() {
        return "NewPerson{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", cars=" + cars +
                '}';
    }
}

DataSource.java

package com.spring.beans.collections;

import java.util.Properties;

public class DataSource {

    private Properties properties;

    public Properties getProperties() {
        return properties;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public String toString() {
        return "DataSource{" +
                "properties=" + properties +
                '}';
    }
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <!--配置bean
        class:bean 的全類名, 通過反射的方式 在IOC容器中建立Bean, 所以要求Bean中必須有無引數的構造器
        id: 標識容器中的 bean, id 唯一,
    -->
    <bean id ="helloworld" class="com.spring.beans.HelloWorld">
        <property name="name" value="Spring"></property><!--這個是通過setter方法進行最常用的屬性注入-->
    </bean>

    <!--通過構造方法來配置bean的屬性-->
    <bean id="car" class="com.spring.beans.Car">
        <constructor-arg value="Audi" index="0"></constructor-arg>
        <constructor-arg value="ShangHai" index="1"></constructor-arg>
        <constructor-arg value="300000" index="2"></constructor-arg>
    </bean>

    <!--使用構造器注入屬性值可以指定引數的位置和型別!以區分過載的構造器!-->
    <bean id="car2" class="com.spring.beans.Car">
        <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg>
        <!--如果字面值包含特殊字元可以使用<![CDATA[]]>包裹起來-->
        <!--屬性值也可以直接用<value>標籤配置-->
        <constructor-arg type="java.lang.String">
            <value><![CDATA[<ShangHai^>]]></value>
        </constructor-arg>
        <constructor-arg type="int">
            <value>250</value>
        </constructor-arg>
    </bean>

    <bean id="person" class="com.spring.beans.Person">
        <property name="name" value="Tom"></property>
        <property name="age" value="24"></property>
        <!--可以使用 property 的 ref 屬性建立 bean 之間的引用關係. -->

        <!--<property name="car" ref="car2"></property>-->

        <!--<property name="car">
            <ref bean="car2"/>
        </property>-->

        <!--內部bean,不能被外部引用,只能在內部使用-->
        <property name="car">
            <bean class="com.spring.beans.Car">
                <constructor-arg value="Ford"></constructor-arg>
                <constructor-arg value="Changan"></constructor-arg>
                <constructor-arg value="200000" type="double"></constructor-arg>
            </bean>
        </property>
        <property name="car.maxSpead" value="260"></property>

    </bean>

    <bean id="person2" class="com.spring.beans.Person">
        <constructor-arg value="Jerry"></constructor-arg>
        <constructor-arg value="25"></constructor-arg>

        <!--<constructor-arg ref="car"></constructor-arg>-->
        <!--測試賦值null-->
        <!--<constructor-arg><null/></constructor-arg>-->

        <constructor-arg ref="car"></constructor-arg>
        <!--為級聯屬性賦值,注意:屬性需要先初始化後才可以為級聯屬性賦值,否則會有異常,和Struts不同-->
        <property name="car.maxSpead" value="250"></property>


    </bean>


    <!--測試如何配置集合屬性-->

    <bean id="person3" class="com.spring.beans.collections.Person">
        <property name="name" value="Mike"></property>
        <property name="age" value="27"></property>
        <property name="cars">
            <!--使用list節點為List型別的屬性賦值-->
            <list>
                <ref bean="car"/>
                <ref bean="car2"/>
                <bean class="com.spring.beans.Car">
                    <constructor-arg value="Ford"></constructor-arg>
                    <constructor-arg value="Changan"></constructor-arg>
                    <constructor-arg value="200000" type="double"></constructor-arg>
            </bean>
            </list>
        </property>
    </bean>

    <!--配置Map 屬性值-->
    <bean id="newPerson" class="com.spring.beans.collections.NewPerson">
        <property name="name" value="Rose"></property>
        <property name="age" value="28"></property>
        <property name="cars">
            <!--使用map 節點及map的entry 子節點配置 Map型別的成員變數-->
            <map>
                <entry key="AA" value-ref="car"></entry>
                <entry key="BB" value-ref="car2"></entry>
            </map>
        </property>
    </bean>
    
    <!--配置Properties屬性值-->
    <bean id = "dataSource" class="com.spring.beans.collections.DataSource">
        <property name="properties">
            <!--使用props和prop 子節點來為Properties 屬性賦值-->
            <props>
                <prop key="user">root</prop>
                <prop key="password">1234</prop>
                <prop key="jdbcUrl">jdbc:mysql:///test</prop>
                <prop key="driverClass">com.mysql.jdbc.Driver</prop>
            </props>
        </property>
    </bean>

    <!--配置單例的集合bean,以供多個bean進行引用,需要匯入util名稱空間-->
    <util:list id="cars">
        <ref bean="car"/>
        <ref bean="car2"/>
    </util:list>

    <bean id="person4" class="com.spring.beans.collections.Person">
        <property name="name" value="Jack"></property>
        <property name="age" value="29"></property>
        <property name="cars" ref="cars"></property>
    </bean>

    <!--通過p名稱空間為bean的屬性賦值,需要先匯入p名稱空間,相對於傳統的配置方式更加的簡潔-->
    <bean id="person5" class="com.spring.beans.collections.Person" p:age="30"
          p:name="Queen" p:cars-ref="cars"></bean>

    <!--<bean id ="helloworld2" class="com.spring.beans.HelloWorld">
        <property name="name" value="Spring"></property>
    </bean>-->
</beans>

Main.java

package com.spring.beans;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args){

       /* //建立HelloWorld的一個物件
        HelloWorld helloWorld = new HelloWorld();
        //為name 屬性賦值
        helloWorld.setName("atguigu");*/


        //1.建立Spring 的IOC容器物件
        //ApplicationContext 代表IOC容器,實際上是一個藉口
        //ClassPathXmlApplicationContext: 是ApplicationContext 介面的實現類,該實現類從類路勁下來載入配置檔案
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        //2.從IOC容器中獲取Bean 例項
        //利用id定位到IOC容器中的bean
        HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloworld");
        //利用型別返回IOC容器中的Bean,但要求IOC容器中必須只能由一個該型別的Bean
        //HelloWorld helloWorld = ctx.getBean(HelloWorld.class);//要求這個類在配置檔案中是唯一的
        System.out.println(helloWorld)
            
           

相關推薦

Spring_(4)屬性配置細節

集合屬性 在Spring中可以通過一組內建的xml標籤(例如:,或)來配置集合屬性。 配置java.util.List型別的屬性,需要指定標籤,在標籤裡包含一些元素,這些標籤可以通過指定簡單的常量值,通過指定對其他Bean的引用,通過指定內建Bean定義。通過指定空元素,甚

Spring_(4)屬性配置細節之一

Spring_(4)屬性配置細節 字面值 字面值:可用字串表示的值,可以通過元素標籤或value屬性進行注入。 基本資料型別及其封裝類、String等型別都可以採取字面值注入的方式。 若字面值中包含特殊字元,可以使用<![CDATA[[這裡填特殊字元]]&g

4)Spring學習記錄---Spring_bean(屬性配置細節

    這一節主要學了bean的詳細配置   特殊符號的解決方法: 如果字串裡有特殊符號需要用<![CDATA[]]> 引用其他bean 通過引用來使用bean。有時某類bean包含另一類bean。這裡要用到ref引用

Spring_屬性配置細節

value可以通過value屬性來   字面值: 可用字串表示的值,可以通過<value>元素標籤或value屬性進行注入 基本資料型別及其封裝類,String等型別都可以採取字面值注入的方式 若字面值中包含特殊字元,可以使用<![CDATA[]]>把字面值包裹

02-spring學習-屬性配置細節

學習 com type tor rri spring 例子 n) 例如 配置bean的一些細節 字面值 如果包含特殊符號,直接寫會報錯。可以用這個<![CDATA[]]>包裹起來。 比如這裏的配置屬性裏面的value值包含<>等特殊符號,直接寫會報

SSM配置檔案

配置檔案:SSM 1.web.xml (springmvc的web.xml檔案< web-app>< /web-app>) <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="htt

升級到Kubernetes1.8.4配置細節差異以及k8s幾個不常見的坑

kubernetes已經發布了1.8,今天需要在一個新機房部署k8s環境,於是決定嘗試最新版本1.8,部署過程中故意和以前的部署步驟有些不同,故而出現了一些問題,並且發現k8s這有個新版本本身幾個差異地方記錄如下:1.首先遇到的問題便是get-kub-binaries.sh執

java ee SSM框架連線資料庫四個配置檔案: mybatis-config.xml檔案配置

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD

使用 @ConfigurationProperties 注入配置資訊

在上一篇部落格中,我們的屬性配置類FooProperties通過使用@ConfigurationProperties註解實現了配置資訊的注入;然後又通過使用@EnableConfigurationProperties註解才使得配置bean被創建出來。其實,@

4.18)SQL server 2008一些常見配置(鏈接服務器配置,訪問其他數據庫)

修改 beta pro ntp 查看版本 collation chang 手工 lin SQL server 2008一些常見配置之二(鏈接服務器配置,訪問其他數據庫) 一、訪問Oracle數據庫 Oracle是目前排名第一的數據庫,一般對數據安全和

spring_(13)通過註解配置

元件裝配 < context:component-scan >元素還會自動註冊AutowiredAnnotationBeanPostProcessor例項,該例項可以自動裝配具有@Autowired和@Resource、@Inject註解的屬性 @Auto

Entity Framework 4.1 DbContext使用記——如何玩轉本地實體? DbSet.Local屬性的使用與實現

今天為大家帶來DbSet.Local屬性的使用與實現。和上次介紹的Find函式首先查詢context中快取的實體類似,DbSet的Local屬性也是返回context中快取並且被跟蹤的實體。不同點在於,Local屬性不會返回狀態為EntityState.Deleted的實

SpringBoot簡明教程專案屬性配置):@ConfigurationProperties與@Value簡單比較

前文回顧 在上一篇博文:SpringBoot簡明教程之專案屬性配置(一):YAML簡介 中我們簡單的介紹了SpringBoot的專案屬性配置中有關YAML檔案的簡單語法以及簡單展示了通過配置檔案進行值注入。 @ConfigurationProper

4.AngularJS四大特征: 雙向數據綁定

sco font int out grep 模型 多行文本 pan oot AngularJS四大特征之二: 雙向數據綁定 (1)方向一:把Model數據綁定到View上——此後不論何時只要Model發生了改變,則View中的呈現會立即隨之改變!實現方法: {{ }}、

mongodb3.4.4安裝副本集,wt引擎配置優化(

記錄 空間 今天大概研究下wiredtiger引擎,mongo從3.0開始引入,主要為了解決吃內存多,占用大量磁盤空間的問題,其實即使用了wt引擎,在性能上還是比tokuft要差,但是tokuft 在功能上代碼叠代的太慢,退而求其次大家還是用了mongo,首先3.0的時候默認還是mmapv1 引擎,所

搭建backup服務器rsyncdaemon服務模式rsync客戶端配置

rsync1.檢查客戶端是否有rsync服務:[[email protected]/* */ ~]# rsync --versionrsync version 3.0.6 protocol version 30Copyright (C) 1996-2009 by Andrew Tridgell

搭建nfs共享存儲服務nfs服務端配置語法及配置實戰詳解

linux1.1.NFS服務端配置文件路徑為: /etc/exports,並且默認為空,需要用戶自行配置。/etc/exports文件配置格式為:NFS共享的目錄 NFS客戶端地址1(參數1,參數2...)客戶端地址2(參數1,參數2)1.NFS共享的目錄:為NFS服務端要共享的實際目錄,要用絕對路徑,如(/

[js高手路]深入淺出webpack教程系列4-插件使用html-webpack-plugin配置(上)

技術 輸出 js函數 動態生成 git tro mon ebp 執行 還記得我們上文中的index.html文件嗎? 那裏面的script標簽還是寫死的index.bundle.js文件,那麽怎麽把他們變成動態的index.html文件,這個動態生成的index.html文

selenium與頁面交互:webelement類的屬性

tex tro 錯誤信息 類的屬性 大小 html標簽 cnblogs text ron webelement類的屬性如下: element.size() 獲取元素的大小 element.tag_name() 獲取元素的HTML標簽名稱 element.text()

Spring框架context的註解管理方法 使用註解註入對象屬性

.org es2017 swift package 自動 clas 找到 裝配 alt 首先還是xml的配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.spring