天天看點

Spring架構學習筆記(二)IOC & DI容器xml基本配置

通過第一篇學習筆記對Spring架構有了一個大體的了解之後,開始記錄正題。

首先記錄配置的前提就是建立項目。

好,那這篇文章就從頭開始。。。。。

(一) 建立一個Java項目

好,第一步很簡單,學習Spring架構的前提首先就是先學會搭建架構。具體的搭建架構的文章沒寫,劍指  搭建Spring架構

恭喜第一部搭建架構完成 可以順利的編寫代碼了。。。

首先建立一個包,在建立一個實體類,本文以Person類 Car類為例

Person類

package Car;

public class Person {
	private String name;
	private int age;
	private Car car;
	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 Car getCar() {
		return car;
	}
	public void setCar(Car car) {
		this.car = car;
	}
	
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
	}
	

}
           

Car類

package Car;

public class Car {
	private String brand;
	private String corp;
	private double price;
	private int maxspeed;
	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 maxspeed) {
		super();
		this.brand = brand;
		this.corp = corp;
		this.maxspeed = maxspeed;
	}
	@Override
	public String toString() {
		return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price + ", maxspeed=" + maxspeed + "]";
	}
	

}
           

配置Car的xml檔案。

右鍵Src選擇Spring bean 建立一個XML配置檔案,首先配置car類

1. 全類名屬性配置Car

(注意 Car類中需要添加get set函數  不需要寫構造方法)

<bean id="c1" class="Car.Car">
  <property name="brand" value="Baoma"></property>
  <property name="corp" value="Beijing"></property>
  <property name="price" value="300000"></property>
  <property name="maxspeed" value="260"></property>

</bean>
           

2.全類名構造器配置Car (注意Car類中必須加構造方法,建立的構造方法用于配置,不需要寫Get Set函數)

<bean id="car" class="Car.Car">
<constructor-arg value="aodi"></constructor-arg>
<constructor-arg value="shanghai"> </constructor-arg>
<constructor-arg value="300000"></constructor-arg>
</bean>
           

3. 需要注意的是構造器配置中如果類中有多個構造方法

① . 按索引比對入參    即通過index 注入

Spring架構學習筆記(二)IOC &amp; DI容器xml基本配置

②.  按類型比對入參   通過type注入

Spring架構學習筆記(二)IOC &amp; DI容器xml基本配置

4. 如果注入的值中有特殊字元

用<value> <![CDATA[      字元    ]]></value>   方法注入

<bean id="car2" class="Car.Car">
<constructor-arg value="baoma" type="java.lang.String"></constructor-arg>
<constructor-arg  type="java.lang.String"> 
<value> <![CDATA[上海~]]></value>   
<!--   通過CDATA給參數指派  用于字面值有特殊字元的字元串  -->
</constructor-arg>
<constructor-arg value="240" type="int"></constructor-arg>
</bean>
           

5. 引入其他類型的bean  即在Person類中引用Car類

可以直接通過 ref 引入配置完成的car的id。

<property name="car" ref="car"></property>
           

6. 内部引入其他類型的car,用于需要引用的Car類還沒有配置,可以在Person類中直接配置

這裡需要注意的就是内部配置的Car 就不能被外部調用 是以不用寫ID

<bean id="person" class="Car.Person">
    <property name="name" value="Tom"></property>
    <property name="age" value="20"></property>
   
<!-- 内部Bean 不能被外部使用 隻能在内部被調用   不用寫ID-->
    <property name="car">
    <bean class="Car.Car">
       <constructor-arg value="Ford"></constructor-arg>
       <constructor-arg value="北京"></constructor-arg>
       <constructor-arg value="240" type="int"></constructor-arg>
     </bean>
    </property>
           

7. 配置null屬性

簡單粗暴 直接null

<constructor-arg><null></null></constructor-arg> 
           

8. 集合屬性

(如一個人有多輛車,那麼配置Person屬性的時候就要考慮車這一個集合了)

① .  在 Spring中可以通過一組内置的 xml 标簽(例如: <list>, <set> 或 <map>) 來配置集合屬性。

<bean id="person2" class="Car2.Person">
  <property name="name" value="Rose"></property>
  <property name="age" value="21"></property>
  <property name="cars" >
<!-- 直接利用list  以及ref調用 -->
    <list>
    <ref bean="car"></ref>
    <ref bean="car2"></ref>
    </list>
  </property>
</bean>
           

加一個Map集合的

<!-- 配置Map集合屬性指派 -->
<bean id="person3" class="Car2.Person2">
   <property name="name" value="Kobe"></property>
   <property name="age" value="22"></property>
   <property name="cars">
 <map>
   <entry key="AA" value-ref="car"></entry>
   <entry key="BB" value-ref="car2"></entry>
 </map>
   </property>
</bean>
           

②.  還可以通過内部配置bean配置加入

<list>
    <ref bean="car"></ref>
    <ref bean="car2"></ref>
    <bean class="Car.Car">
       <constructor-arg value="Ford"></constructor-arg>
       <constructor-arg value="北京"></constructor-arg>
       <constructor-arg value="2600000" type="double"></constructor-arg>
       </bean>
    </list>
           

③. 引入Util命名空間   

建立一個list  後面可以直接引用外部bean “cars”

<!-- Util配置 -->
<util:list id="cars">
 <ref bean="car"/>
 <ref bean="car2"/>
</util:list>
           

9. P命名空間 (據說不常用,但是我個人感覺配置超級簡單!!)

第一步引入 P 的命名空間(具體操作不會的話就是,點選代碼框左下角有一個 namespace 然後點選 p 點确定就ok了)

開始配置

<!-- P命名空間配置 -->
<bean id="person4" class="Car2.Person" p:name="James" p:age="35" p:cars-ref="cars"></bean>
           

一行代碼直接結束。

這一篇就先寫這麼多吧。。。