一、Spring基本使用
阿新 • • 發佈:2018-11-22
1.IOC
- 什麼是IOC?
控制反轉:將物件的建立權反轉給(交給)Spring
- 為什麼使用IOC?
業務和實現類過於緊密,業務變更時要修改原始碼
- 建立
UserDao介面和UserDaoMysqlImpl 實現類
public interface UserDao {
}
public class UserDaoMysqlImpl implements UserDao{
}
- 傳統開發模式:
實現類UserDaoMysqlImpl和介面UserDao 緊密耦合,不利於複雜業務
UserDao user = new UserDaoMysqlImpl();
- IOC模式
- 首先建立配置檔案
applicationContext.xml
(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" >
<bean id="userDao" class="com.itlike.demo1.UserDaoMysqlImpl" >
</bean>
</beans>
- 在
UserTest
類裡建立測試方法Junit4 test
@Test
public void test(){
//1.載入配置檔案
ApplicationContext applicationContext=
new ClassPathXmlApplicationContext ("applicationContext.xml");
//2.根據id獲取物件
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
}
- 這樣就使用IOC的方式建立了
UserDao
的物件,當需求變更時(需要改變實現類)
只需要改動xml
檔案裡的class
屬性即可。
2.依賴注入-DI
- 修改類
- 給
UserDaoMysqlImpl
新增屬性值name
和setter
方法
public class UserDaoMysqlImpl implements UserDao{
public String name;
public void setName(String name){
this.name=name;
}
}
- DI注入
(給屬性賦值)
前提必須有IOC的環境
,即使用IOC建立了物件!實現類當中的屬性要提供setter方法
(如上)在配置檔案當中配置依賴注入(配置bean和property標籤)
- 傳統方式
(也是給屬性賦值)
UserDao userDao = new UserDaoMysqlImpl();
userDao.name="lk"; //有的使用setName方法,但是同一個道理
- DI注入
- 配置檔案修改
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl" >
<!--要提供set方法才能注入成功-->
<property name="name" value="lk"/>
</bean>
- 測試類
//1.載入配置檔案
ApplicationContext applicationContext=
new ClassPathXmlApplicationContext("applicationContext.xml");
//2.根據id獲取物件
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
System.out.println(userDao.name); //lk (String型別)
3.Bean相關配置
- 名稱與標識
- id:
使用了約束中的唯一約束。裡面不能出現特殊字元的
- name:
沒有使用約束中的唯一約束。裡面可以出現特殊字元。
- 設定物件的生命週期方法
- 初始化:
init-method
Bean被初始化的時候執行的方法
- 銷燬:
destroy-method
Bean被銷燬的時候執行的方法(Bean是單例建立,工廠關閉)
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl" init-method="init" destroy-method="destroy">
- Bean的作用範圍的配置
- 單例模式
預設
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl" scope="singleton">
- 多例模式
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl" scope="prototype">
- 工廠例項化的方式
無參構造-預設
靜態工廠例項化(少用)
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl" factory-method="Xxx(方法名)">
例項工廠例項化(極少用)
4.分模組配置
- 顧名思義,即使用多個的
applicationContext.xml
,互相引入
applicationContext1.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">
<!--分模組配置,匯入模組配置2-->
<import resource="applicationContext2.xml"/>
</beans>
applicationContext2.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">
<bean id="user" class="com.itlike.demo3.User" factory-method="createUser">
<property name="" value=""/>
</bean>
</beans>