Spring Bean 作用域
默認提供5中作用域
- singleton(默認)
Spring的ApplicationContext容器在啟動時候钩杰,自動實例化所有的singleton的bean并緩存于容器當中畴蹭。 - prototype
每次從容器調用bean時候,都會返回一個新的實例,每次調用getBean()時相當于執(zhí)行new Bean()的操作。
當用戶使用Spring的 WebApplicationContext時,還可以使用另外3中Bean的作用域,即
request
,session
和globalSession
。
Spring Schema配置格式
Spring1.0采用DTD格式
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
dtd 聲明玖像,表示該XML里元素和屬性等符合spring-beans-2.0.dtd這個文檔類型定義標準。
由于DTD有些局限性,比如不支持命名空間齐饮。
XML Schema
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
</beans>
XML Schema命名空間作用:
- 避免命名空間沖突,類似Java中的package
- 將不同標簽分類捐寥。比如aop是針對aop的標簽
代碼解釋 :
-
xmlns="http://www.springframework.org/schema/beans"
聲明xml文件默認命名空間,表示未使用其他命名空間的所有標簽的默認命名空間 -
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
聲明XML Schema實例,聲明后就可以使用schemaLocation屬性了祖驱。 -
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
指定Schema的位置這個屬性必須結合命名空間使用握恳。這個屬性有兩個值.第一個表示需要使用的命名空間。第二個表示供命名空間使用的XML Schema的位置羹膳。
xsi:schemaLocation
的含義是如果需要找http://www.springframework.org/schema/beans
命名空間定義睡互,使用版本http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
Bean 基本配置
- 屬性注入
- 基本值注入
<bean id="xmlbean" class="com.wuyue.XmlBean">
<property name="name" value="mamba"></property>
</bean>
public class XmlBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
這里定義private String name
是非必須的, Bean 容器會找到setName
進行注入。
- 對象類型注入
<property name="node">
<ref bean="node"></ref>
</property>
<bean id="node" class="com.wuyue.Node">
<property name="name" value="heimanba"></property>
</bean>
- 使用p命名空間注入
// 使用p命名空間之前
<bean id="xmlbean" class="com.wuyue.XmlBean">
<property name="name">
<value>dankun</value>
</property>
</bean>
// 使用p之后
<bean id="xmlbean" class="com.wuyue.XmlBean" p:name="dankun2">
</bean>
- 構造方法注入
- 基本使用
<bean id="xmlbean" class="com.wuyue.XmlBean">
<constructor-arg value="dankun"></constructor-arg>
</bean>
public class XmlBean {
private String name;
public XmlBean(String name) {
this.name = name;
}
}
- 按照類型匹配入?yún)?/li>
<constructor-arg value="dankun" type="java.lang.String"></constructor-arg>
- 按照索引匹配入?yún)?/li>
<bean id="xmlbean" class="com.wuyue.XmlBean">
<constructor-arg index="0" value="dankun" type="java.lang.String">
</constructor-arg>
<constructor-arg index="1" value="age" type="java.lang.String">
</constructor-arg>
</bean>
- 工廠方法注入
工廠方法注入,適用于將非Spring的代碼或者第三方類庫注入Spring容器進行管理陵像。
public class CarFactory {
public Car createBM() {
Car car = new Car("寶馬");
return car;
}
}
<beans>
<bean id="carFactory" class="com.wuyue.CarFactory"></bean>
<bean id="car" factory-bean="carFactory" factory-method="createBM"></bean>
</beans>
當然最好的方式是靜態(tài)工廠方法注入
public class CarFactory {
public static Car createBM() {
Car car = new Car("寶馬");
return car;
}
}
<beans>
<bean id="car" class="com.wuyue.CarFactory" factory-method="createBM"></bean>
</beans>