這一節我們介紹一下Spring框架的相關常用配置:
- Spring依賴注入的兩種方式(構造方法注入和setter方式注入)
- p-namespace方式配置
- properties屬性文件配置方式
- 集合對象配置方式
- Bean scopes作用域(單例作用域和原生作用域)
1. Spring依賴注入方式
- 構造方法注入,它相當於在Spring初始化對象的時候調用構造方法將其對象之間的依賴關係給注入到對象中
- 先在類中定義好依賴對象
- 再去定義構造方法,通過在構造方法的參數中設置對象的依賴關係
- 最後在Spring配置文件中使用<constructor-arg>標籤搞定對象的依賴注入/<constructor-arg>
<code>package com.zlt.spring.day02;
public class PetServiceImpl {
private PetDaoImpl petDao; //依賴對象
public PetServiceImpl(PetDaoImpl petDao) { //構造方法的DI
this.petDao = petDao;
}
public void selectPet() {
petDao.selectPet();
}
}/<code>
<code>package com.zlt.spring.day02;
public class PetDaoImpl {
public void selectPet() {
/**
* 完成寵物數據查詢
*/
System.out.println("==寵物數據查詢==");
}
}/<code>
<code>
<beans>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<bean>
<constructor-arg>
/<bean>
<bean>
/<beans>/<code>
- 設值注入,它通過給依賴對象添加setter方法來完成對象的DI
- 先定義好依賴對象
- 再給依賴對象添加setter方法
- 最後在配置文件中使用<property...>標籤就OK了
<code>package com.zlt.spring.day01;
public class PetServiceImpl {
private PetDaoImpl petDao; //依賴對象
private ItemDaoImpl itemDao; //依賴對象
public void setPetDao(PetDaoImpl petDao) {
this.petDao = petDao;
}
public void setItemDao(ItemDaoImpl itemDao) {
this.itemDao = itemDao;
}
public void selectPet() {
petDao.selectPet();
itemDao.selectItem();
}
}/<code>
<code>package com.zlt.spring.day01;
public class PetDaoImpl {
public void selectPet() {
/**
* 完成寵物數據查詢
*/
System.out.println("==寵物數據查詢==");
}
}/<code>
<code>package com.zlt.spring.day01;
public class ItemDaoImpl {
public void selectItem() {
/**
* 完成寵物分類數據查詢
*/
System.out.println("==寵物分類的數據查詢==");
}
}/<code>
<code>
<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>
<bean>
<property>
<property>
/<bean>
<bean>
<bean>
/<beans>/<code>
2. p-namespace配置方式
- 主要簡化<property>標籤的配置/<property>
- 要使用p-namespace需要在整個配置文件聲明部分加入p-namespace的XMLSchema定義
<code>
<beans>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<bean>
<constructor-arg>
/<bean>
<bean>
<bean>
/<beans>/<code>
3. properties屬性文件配置
此配置可以利用Spring框架幫我們解析Java中的屬性文件。下面我們介紹兩種配置方法來解析Java中的屬性文件
- <bean>來解析Java中屬性文件/<bean>
<code>
<beans>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<bean>
<property>
/<bean>
<bean> p:username="${mysql.username}"
p:password="${mysql.password}"
p:driver="${mysql.driver}">/<bean>
/<beans>/<code>
- <property-placeholder>來解析Java中屬性文件。這個需要在Spring配置文件的XMLSchema導入xmlns:context/<property-placeholder>
<code>
<beans>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<property-placeholder>
<bean> p:username="${mysql.username}"
p:password="${mysql.password}"
p:driver="${mysql.driver}">/<bean>
/<beans>/<code>
4. 集合對象的配置
- 在Spring框架配置文件中採用<list>,/<list>
<code>
<beans>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean>
<property>
<list>
<value>Hello World/<value>
/<list>
/<property>
<property>
/<property>
<property>
<value>Hello World/<value>
/<property>
<property>
<props>
<prop>Hello World/<prop>
<prop>liuyang/<prop>
/<props>
/<property>
/<bean>
/<beans>/<code>
<code>package com.zlt.spring.day02;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class CollectionsSpring {
private List> list;
private Map<string> map;
private Set> set;
private Properties props;
public void setList(List> list) {
this.list = list;
}
public void setMap(Map<string> map) {
this.map = map;
}
public void setSet(Set> set) {
this.set = set;
}
public void setProps(Properties props) {
this.props = props;
}
public void showList() {
for (int i = 0; i <list.size> System.out.println(list.get(i));
}
}
public void showMap() {
System.out.println(map);
}
public void showSet() {
Iterator> iterator = set.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
public void showProps() {
Enumeration> enumeration = props.propertyNames();
while(enumeration.hasMoreElements()) {
System.out.println(props.getProperty(enumeration.nextElement().toString()));
}
}
}/<list.size>/<string>/<string>/<code>
5. Bean Scopes作用域
- Singleton:單例作用域,Spring容器初始化對象只有唯一個(默認)
- Prototype:原生作用域,每次調用Spring容器的getBean方法都會重新產生一個新的對象
- Request
- Session
- Global Session
這裡重點還是談一下單例作用域和原生作用域。在配置單例作用域和原生作用域需要使用scope屬性
<code>
<beans>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean>
<property>
<list>
<value>Hello World/<value>
/<list>
/<property>
<property>
/<property>
<property>
<value>Hello World/<value>
/<property>
<property>
<props>
<prop>Hello World/<prop>
<prop>liuyang/<prop>
/<props>
/<property>
/<bean>
/<beans>/<code>
<code>package com.zlt.spring.test02;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.zlt.spring.day02.CollectionsSpring;
import com.zlt.spring.day02.DBConnection;
import com.zlt.spring.day02.Person;
import com.zlt.spring.day02.PetServiceImpl;
public class Test01 {
@Test
public void m05() {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
CollectionsSpring collectionsSpring01 = context.getBean("collectionsSpring", CollectionsSpring.class);
CollectionsSpring collectionsSpring02 = context.getBean("collectionsSpring", CollectionsSpring.class);
System.out.println(collectionsSpring01.hashCode());
System.out.println(collectionsSpring02.hashCode());
}
}/<code>
閱讀更多 知了堂 的文章