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