1. 程式人生 > >Spring學習(二)

Spring學習(二)

Bean標籤常用屬性

(1)id屬性:起的名稱,id屬性值名稱可以任意命名,id屬性值不能包含特殊符號,根據id值,得到配置物件

(2)class屬性:建立物件所在類的全路徑

(3)name屬性:功能和id屬性一樣,id屬性值不能包含特殊符號,但是在name屬性值裡面可以包含特殊符號。

(4)scope屬性:   

-singleton:預設值,單例的,

bean1.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">
        <!-- ioc入門 -->
         <bean id="user" class="cn.itcast.ioc.User" scope="singleton"></bean> 
        <!-- 使用靜態工廠建立物件 -->
        <!-- <bean id="bean2" class="cn.itcast.bean.Bean2Factory" factory-method="getBean2"></bean> -->
        <!-- 使用例項工廠建立物件 -->
        <!-- 建立工廠物件 -->
       <!--  <bean id="bean3Factory" class="cn.itcast.bean.Bean3Factory"></bean>  
        <bean id="bean3" class="bean3Factory" factory-method="getBean3"></bean> -->
        </beans>


-prototype:多例的

TestIOC類程式碼不變,將配置檔案的bean標籤的scope值改為prototype,結果如下


-request:建立物件把物件放到request域裡面

-session:建立物件把物件放到session域裡面

-globalSession:建立物件把物件放到globalSession裡面

屬性注入

1 建立物件時候,向類裡面屬性裡面設定值

2 屬性注入的方式介紹(三種方式)

(1)使用set方法注入

(2)使用有引數構造注入

(3)使用介面注入


3 在spring框架裡面,支援前兩種方式

(1)set方法注入

(2)有引數構造注入

使用有參建構函式注入

bean1.xml     
   <!-- 使用有引數構造注入屬性 -->
        <bean id="demo1" class="cn.itcast.property.PropertyDemo1">
        <!-- 使用有參建構函式注入屬性 -->
        <constructor-arg name="username" value="小王"></constructor-arg>
        </bean>
PropertyDemo1.java
package cn.itcast.property;

public class PropertyDemo1 {

	private String username;

	public PropertyDemo1(String username) {
		this.username = username;
	}
	public void test1() {
		System.out.println("demo1>>>>>>>"+username);
	}
}
package cn.itcast.ioc;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.itcast.bean.Bean2;
import cn.itcast.property.PropertyDemo1;

public class TestIOC {

    @Test
    public void testUser() {
        //1載入spring配置檔案,根據建立物件
        ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
        //2得到配置建立的物件
        PropertyDemo1 demo1=(PropertyDemo1) context.getBean("demo1");
        demo1.test1();

    
    }
}

使用set方法注入屬性

book.java
package cn.itcast.property;

public class Book {

	private String bookname;
	//set方法

	public void setBookname(String bookname) {
		this.bookname = bookname;
	}
	public void demobook() {
		System.out.println("book......"+bookname);
	}
}
bean1.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">
        <!-- ioc入門 -->
        <!--  <bean id="user" class="cn.itcast.ioc.User" scope="prototype"></bean> --> 
        <!-- 使用靜態工廠建立物件 -->
        <!-- <bean id="bean2" class="cn.itcast.bean.Bean2Factory" factory-method="getBean2"></bean> -->
        <!-- 使用例項工廠建立物件 -->
        <!-- 建立工廠物件 -->
       <!--  <bean id="bean3Factory" class="cn.itcast.bean.Bean3Factory"></bean>  
        <bean id="bean3" class="bean3Factory" factory-method="getBean3"></bean> -->
        
        <!-- 使用有引數構造注入屬性 -->
       <!--  <bean id="demo1" class="cn.itcast.property.PropertyDemo1"> -->
        <!-- 使用有參建構函式注入屬性 -->
      <!--   <constructor-arg name="username" value="小王"></constructor-arg>
        </bean> -->
        <!-- 使用set方法注入屬性 -->
        <bean id="book" class="cn.itcast.property.Book">
        <!-- 注入屬性 -->
        <property name="bookname" value="PHP開發實戰"></property>
        </bean>
        
        </beans>
package cn.itcast.ioc;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.itcast.bean.Bean2;
import cn.itcast.property.Book;
import cn.itcast.property.PropertyDemo1;

public class TestIOC {

	@Test
	public void testUser() {
		//1載入spring配置檔案,根據建立物件
		ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
		//2得到配置建立的物件
		Book book=(Book) context.getBean("book");
		book.demobook();

	
	}
}

注入物件型別屬性(重點)

1 建立service類和到類

(1)在service得到dao物件

2 具體實現過程

(1)在service裡面把dao作為型別屬性

(2)生成dao型別屬性 的set方法

package cn.itcast.ioc;

public class UserService {

	//1定義dao型別屬性
	private UserDao userDao;
	//2生成set方法
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	public void add() {
		System.out.println("service......");
		//在service裡面得到dao類物件,才能呼叫dao
/*		UserDao dao=new UserDao();
		dao.add();*/
		userDao.add();
	}


}

(3)配置檔案中完成注入。


P*名稱空間注入


package cn.itcast.property;

public class Person {

	private String pname;

	public void setPname(String pname) {
		this.pname = pname;
	}
	public void test1() {
		System.out.println("person....."+pname);
	}
}



注入複雜型別屬性

1 陣列型別

2 list集合

3 map集合

4 properties型別

package cn.itcast.property;

import java.util.List;
import java.util.Map;
import java.util.Properties;

public class Person {

	private String pname;

	public void setPname(String pname) {
		this.pname = pname;
	}
	
	private String[] arrs;
	private List<String>list;
	private Map<String,String>map;
	private Properties properties;
	

	public void setArrs(String[] arrs) {
		this.arrs = arrs;
	}

	public void setList(List<String> list) {
		this.list = list;
	}
	public void setMap(Map<String, String> map) {
		this.map = map;
	}

	public void setProperties(Properties properties) {
		this.properties = properties;
	}

	public void test1() {
		System.out.println("person....."+pname);
		System.out.println("arrs....."+arrs);
		System.out.println("map....."+map);
		System.out.println("properties....."+properties);
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p"
    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 id="person" class="cn.itcast.property.Person">
        <property name="pname" value="錘子"></property>
        <!-- 陣列 -->
        <property name="arrs">
        <list>
        	<value>小王</value>
        	<value>小馬</value>
        	<value>小宋</value>
        </list>
        </property>
        <!-- list -->
         <property name="list">
        <list>
        	<value>小奧</value>
        	<value>小金</value>
        	<value>小徐</value>
        </list>
        </property>  
        <!-- map -->
         <property name="map">
        <map>
        	<entry key="aa" value="lucy"></entry>
        	<entry key="Bb" value="mary"></entry>
        	<entry key="cc" value="jack"></entry>
        </map>
        </property>      
        
        <property name="properties">
        <props>
		<prop key="driverclass">com.mysql.jdbc.Driver</prop>
		<prop key="username">root</prop>
        </props>
        </property>  
        </bean>

        </beans>
package cn.itcast.ioc;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.itcast.bean.Bean2;
import cn.itcast.property.Book;
import cn.itcast.property.Person;
import cn.itcast.property.PropertyDemo1;

public class TestIOC {

	@Test
	public void testUser() {
		//1載入spring配置檔案,根據建立物件
		ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
		//2得到配置建立的物件
		Person person=(Person) context.getBean("person");
		person.test1();

	
	}
}

IOC和DI區別

(1)IOC:控制反轉,把物件建立交給spring進行配置

(2)DI:依賴注入,向類裡面的屬性中設定值

(3)關係:依賴注入不能單獨存在,需要在ioc基礎之上完成操作

Spring 整合web專案原理

1 載入spring核心配置檔案

//1載入spring配置檔案,根據建立物件
		ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");

(1)new物件,功能可以實現,效率很低

2 實現思想:把載入配置檔案和建立物件過程,在伺服器啟動時候完成

3 實現原理

(1)ServletContext物件

(2)監聽器

(3)具體使用

-在伺服器啟動時候,為每個專案建立ServletContext物件

-在ServletContext物件建立時候,使用監聽器可以具體到ServletContext物件在什麼時候建立

-使用監聽器監聽到ServletContext物件建立時候

-載入spring配置檔案,把配置檔案配置物件建立

-把創建出來的物件放到ServletContext域物件裡面(setAttribute方法 )

-獲取物件時候,到ServletContext域得到(getAttribute方法)