1. 程式人生 > 其它 >02_Spring Bean 屬性 即xml <beans>標籤詳解

02_Spring Bean 屬性 即xml <beans>標籤詳解

技術標籤:Spring Frameworkspringbeans標籤詳解

Spring Bean

Spring IOC容器相當於一個工廠,容器中的 Bean 相當工廠的產品。工廠要生產和管理 Bean,需要讓工廠知道載入那些Bean,如何載入。

Spring 配置檔案支援兩種不同的格式,分別是 XML 檔案格式和 Properties 檔案格式。

一般Spring 以 XML 檔案格式作為 Spring 的配置檔案,通過 XML 配置檔案註冊並管理 Bean 之間的依賴關係。

Beans.xml 頭配置

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"
>
<bean></bean> </beans>

bean標籤常用屬性

屬性描述
idBean 的唯一識別符號,Spring 容器對 Bean 的配置和管理都通過該屬性完成
nameSpring 容器同樣可以通過此屬性對容器中的 Bean 進行配置和管理,name 屬性中可以為 Bean 指定多個名稱,每個名稱之間用逗號或分號隔開
class指定了 Bean 的具體實現類
scopeBean 例項的作用域, singleton(預設單例)、prototype(原型)、request、session 和 global Session
屬性描述 bean元素的子元素
constructor-arg此元素傳入構造引數進行例項化, index 屬性指定構造引數的序號(從 0 開始),type 屬性指定構造引數的型別
property呼叫 Bean 例項中的 Set 方法完成屬性賦值,元素的 name 屬性指定 Bean 例項中的相應屬性名
屬性描述 property constructor-arg等元素的子元索
refproperty 和 constructor-arg 元素的子元索,ref元素中的 bean 屬性用於指定對 Bean 工廠中某個 Bean 例項的引用
valueproperty 和 constructor-arg 元素的子元索,用於直接指定一個常量值
屬性描述
list用於封裝 List 或陣列型別的依賴注入
set用於封裝 Set 型別屬性的依賴注入
map用於封裝 Map 型別屬性的依賴注入
entrymap元素的子元素,用於設定一個鍵值對。其 key 屬性指定字串型別的鍵值,ref 或 value 子元素指定其值

bean的例項化 bean標籤用例

1:載入user,通過預設無參的構造方法載入user

在這裡插入圖片描述
User類

public class User {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

spring.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
   <!-- bean就是java物件  由spring來建立和管理 -->    
   <bean id="user" class="cn.lingyiwin.bean.User"/>
</beans>

TestUser類

public class TestUser {
	public static void main(String[] args) {
		ApplicationContext act =new ClassPathXmlApplicationContext("config/spring.xml");
		User user = (User)act.getBean("user");
		System.out.println(user);
	}
}

執行結果:說明User物件已經被Spring

cn.lingyiwin.bean.User@2b98378d

上面示例如果沒有看明白,我將預設的構造方法打一行帶嗎?
修改User類

public class User {
	private String name;
	public User() {
		System.out.println("user物件被建立");
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

執行結果:

user物件被建立
cn.lingyiwin.bean.User@2b98378d

2:通過property 為user的那麼屬性設定值。並列印輸出

必須有該屬性的set方法。

<bean id="user" class="cn.lingyiwin.bean.User">
   	<property name="name" value="設定name的值"/>
</bean>

執行結果:

user物件被建立
cn.lingyiwin.bean.User@56ac3a89
設定name的值

3:通過有參的建構函式載入user物件

user物件

public class User {
	private String name;
	
	public User(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}	
}

修改xml

   <bean id="user" class="cn.lingyiwin.bean.User">
   	<constructor-arg name="name" value="有參構造方法"/>
   </bean>

執行結果:

cn.lingyiwin.bean.User@5cb9f472
有參構造方法

4:通過構造方法中還有很多屬性可以設定。可以參考官方文件。

在這裡插入圖片描述
index:通過下標設定
name:通過名稱設定
type:通過引數型別設定 String int等

	<constructor-arg type="String">
   		<value>String</value>
   	</constructor-arg>

ref 是引用型別,value 是用來設定值。