天天看點

Spring進階進階

Java代碼

1. <?xml version="1.0" encoding="UTF-8"?>

2. <!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

3. "http://www.springframework.org/dtd/spring-beans.dtd">

4. <beans>

5. <bean id ="HelloWorld" class="com.jnotnull.HelloWorld">

6. <property name ="message">

7. <value>HelloWorld</value>

8. </property>

9. <bean>

10. </beans>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id ="HelloWorld" class="com.jnotnull.HelloWorld">

<property name ="message">

<value>HelloWorld</value>

</property>

<bean>

</beans>

這裡在配置bean的時候都指明了id,id是這個bean在配置檔案中的唯一辨別,當然也可以使用name,下面說說它們之間的差別:

id屬性是在配置檔案中辨別Bean的,name屬性則可以用來指定這個Bean的别名。因為XML規範對于id的合法字元有嚴格的規定,是以當用非法字元來配置id時候就不行了,這個時候可以通過name屬性來解決。同時通過name屬性可以指定多個id,這些id要用都好或者分号分割。

正如上面的代碼中提到的格式

<bean id ="HelloWorld" class="com.jnotnull.HelloWorld">

id屬性用來表示整個bean,class屬性用來表示這個bean真正代表的類,它是由路徑加;類名組成。

在Spring中,Bean可以被定義為兩種模式:單例模式和非單例模式(singleton or non-singleton)。而Spring預設的是單例模式,何謂單例模式,就是這個Bean隻有一個執行個體存在,而不管有多少個對這個Bean的請求。而非單例模式則回在每次對這個Bean的請求中産生新的執行個體。簡單的說就是:singleton隻會被new一次,而non-singleton卻在每次請求的時候都new一次。這就是差別。

上面提到,Spring中,Bean預設的模式是單例模式,我們來看看它的代碼:

Java代碼

1. <?xml version="1.0" encoding="UTF-8"?>

2. <!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

3. "http://www.springframework.org/dtd/spring-beans.dtd">

4. <beans>

5. <bean id ="HelloWorld" class="com.jnotnull.HelloWorld">

6. <property name ="message">

7. <value>HelloWorld</value>

8. </property>

9. <bean>

10. </beans>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id ="HelloWorld" class="com.jnotnull.HelloWorld">

<property name ="message">

<value>HelloWorld</value>

</property>

<bean>

</beans>

當然我們可以顯式的配置為singleton模式

Java代碼

1. <?xml version="1.0" encoding="UTF-8"?>

2. <!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

3. "http://www.springframework.org/dtd/spring-beans.dtd">

4. <beans>

5. <bean id ="HelloWorld" class="com.jnotnull.HelloWorld" singleton="true">

6. <property name ="message">

7. <value>HelloWorld</value>

8. </property>

9. <bean>

10. </beans>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id ="HelloWorld" class="com.jnotnull.HelloWorld" singleton="true">

<property name ="message">

<value>HelloWorld</value>

</property>

<bean>

</beans>

而要改為non-singleton模式則把singleton屬性改為false就行了

在Spring的配置檔案中,我們完成了對類的屬性的注入:看看下面的代碼:

Java代碼

1. <?xml version="1.0" encoding="UTF-8"?>

2. <!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

3. "http://www.springframework.org/dtd/spring-beans.dtd">

4. <beans>

5. <bean id ="HelloWorld" class="com.jnotnull.HelloWorld">

6. <property name ="message">

7. <value>HelloWorld</value>

8. </property>

9. <bean>

10. </beans>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id ="HelloWorld" class="com.jnotnull.HelloWorld">

<property name ="message">

<value>HelloWorld</value>

</property>

<bean>

</beans>

這裡的propeity标簽對應于類中的屬性,但是如何對其注入null值呢:

看看下面的代碼:

Java代碼

1. <?xml version="1.0" encoding="UTF-8"?>

2. <!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

3. "http://www.springframework.org/dtd/spring-beans.dtd">

4. <beans>

5. <bean id ="HelloWorld" class="com.jnotnull.HelloWorld">

6. <property name ="message">

7. <value>null</value>

8. </property>

9. <bean>

10. </beans>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id ="HelloWorld" class="com.jnotnull.HelloWorld">

<property name ="message">

<value>null</value>

</property>

<bean>

</beans>

或者

Java代碼

1. <?xml version="1.0" encoding="UTF-8"?>

2. <!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

3. "http://www.springframework.org/dtd/spring-beans.dtd">

4. <beans>

5. <bean id ="HelloWorld" class="com.jnotnull.HelloWorld">

6. <property name ="message">

7. <null/>

8. </property>

9. <bean>

10. </beans>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id ="HelloWorld" class="com.jnotnull.HelloWorld">

<property name ="message">

<null/>

</property>

<bean>

</beans>

配置同樣非常友善

下面我們來看看如何實作依賴 depends-on

先看一下代碼

Java代碼

1. <?xml version="1.0" encoding="UTF-8"?>

2. <!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

3. "http://www.springframework.org/dtd/spring-beans.dtd">

4. <beans>

5. <bean id ="HelloWorld" class="com.jnotnull.HelloWorld" depends="date">

6. <property name ="message">

7. <value>HelloWorld</value>

8. </property>

9. <property name ="date">

10. <ref local="date"/>

11. </property>

12. <bean>

13. <bean id="date" class="java.util.Date">

14. </beans>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id ="HelloWorld" class="com.jnotnull.HelloWorld" depends="date">

<property name ="message">

<value>HelloWorld</value>

</property>

<property name ="date">

<ref local="date"/>

</property>

<bean>

<bean id="date" class="java.util.Date">

</beans>

在這裡我們在調用HelloWorld之前我們就必須調用date,對date進行初始化。這就是depends-on的工作方式。