一、Spring入門
1.Spring 入門
Spring 整體框架:
什麼是IOC?
IOC:Inversion of Control(控制反轉),即將對象的創建權反轉給(交給)spring。
spring包含的文件:
docs:Spring的開發規範和API;
libs:Spring開發的jar和源碼;
schema:Spring的配置文件的約束。
Spring環境搭建:以創建Web項目爲例
step1:
step2:在WebContent\WEB-INF\lib包下添加幾個jar包:
step3:創建如下幾個類和接口,
UserDAO接口:
package com;
public interface UserDAO {
public void save();
}
UserDAOImpl實現類:
package com;
public class UserDAOImpl implements UserDAO{
public void save() {
System.out.println("UserDAOImpl...實現了");
}
}
UserDAOImplHello實現類:
package com;
public class UserDAOImplHello implements UserDAO{
public void save() {
System.out.println("UserDAOImplHello...實現了");
}
}
springDemo1測試類:
package com;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class springDemo1 {
@Test
public void demo1() { //用於普通測試
UserDAO userdao = new UserDAOImpl();
userdao.save();
}
@Test
public void demo2() { //用於Spring測試
//創建spring工廠
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring_first.xml");
UserDAO userdao = (UserDAO) applicationContext.getBean("userdao");
userdao.save();
}
}
step4:在src目錄下創建配置文件,
<?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">
<!-- spring的入門配置 -->
<bean id = "userdao" class = "com.UserDAOImplHello"></bean>
</beans>
step5:運行測試類springDemo1中的demo2,得到如下輸出:
此時修改配置文件中的代碼,將下列代碼中的com.UserDAOImpl修改成com.UserDAOImplHello,
<!-- spring的入門配置 -->
<bean id = "userdao" class = "com.UserDAOImpl"></bean>
再次運行測試類springDemo1中的demo2,得到如下輸出:
2.IOC和DI的區別
IOC:控制反轉,將對象的創建權反轉給Spring。
DI:依賴注入,前提必須要有IOC的環境,Spring管理這個類的時候,將類的依賴屬性注入(也可以說設置)進來。
面向對象的幾種特性:
依賴:類之間相互調用,則具有依賴的關係;
繼承:類之間繼承;
聚合:分爲“緊密聚合”和“鬆散聚合”之分。
舉例:
在UserDAOImpl類中添加屬性name,並在該類中save()方法中使用,則name與save()函數之間建立起依賴關係,代碼如下:
public class UserDAOImpl implements UserDAO{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void save() {
System.out.println("UserDAOImpl...實現了"+name);
}
}
由於接口中沒有屬性name,所以如果以常規的方式只能通過創建UserDAOImpl類對象來對name進行設置,比較繁瑣,代碼如下:
@Test
public void demo1() {
UserDAOImpl userdao = new UserDAOImpl(); //創建userdaoImpl類對象
userdao.setName("張三");
userdao.save();
}
但是,使用我們的Spring框架,則不需要如此麻煩,只需要在配置文件裏進行如下設置即可:
<!-- spring的入門配置 -->
<bean id = "userdao" class = "com.UserDAOImpl">
<property name = "name" value = "張三"/>
</bean>
再運行如下代碼:
@Test
public void demo2() {
//創建spring工廠
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring_first.xml");
UserDAO userdao = (UserDAO) applicationContext.getBean("userdao");
userdao.save();
}
輸出結果爲:
分析:這裏Spring可以將UserDAOImpl類所依賴的屬性自動設置進來,只需要在配置文件裏進行設置即可。設置屬性值的過程就叫做DI,Spring幫我們創建UserDAOImpl類的時候,發現該類裏邊有一個屬性name(也可稱之爲“依賴”),通過修改配置文件,則將屬性設置進來。
3.工廠類的概述
Spring的工廠類:
BeanFactory:老版本的工廠類;
ApplicationContext:新版本的工廠類,現在一般使用ApplicationContext工廠類。
BeanFactory與ApplicationContext的區別:
如上圖所示,ApplicationContext接口間接地繼承了BeanFactory接口,之後ClassPathXmlApplicationContext實現類和FileSystemXmlApplicationContext實現類又間接地實現了ApplicationContext接口。
ClassPathXmlApplicationContext類與FileSystemXmlApplicationContext類的使用區別:
ClassPathXmlApplicationContext類創建工廠對象時,配置文件放(spring_first.xml)在該project目錄下的src文件下:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring_first.xml");
FileSystemXmlApplicationContext類創建工廠對象時,配置文件(spring_first.xml)放在硬盤路徑下:
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("C:\\spring_first.xml");