1. 程式人生 > >一、Spring基本使用

一、Spring基本使用

1.IOC

  • 什麼是IOC?

控制反轉:將物件的建立權反轉給(交給)Spring

  • 為什麼使用IOC?

業務和實現類過於緊密,業務變更時要修改原始碼

  • 建立UserDao介面和UserDaoMysqlImpl 實現類
public interface UserDao {    
}

public class UserDaoMysqlImpl implements UserDao{    
}
  • 傳統開發模式:實現類UserDaoMysqlImpl和介面UserDao 緊密耦合,不利於複雜業務
UserDao user = new UserDaoMysqlImpl();
  • IOC模式
  1. 首先建立配置檔案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>
  1. UserTest類裡建立測試方法Junit4 test
@Test
public void test(){   
    //1.載入配置檔案
    ApplicationContext applicationContext=
    new ClassPathXmlApplicationContext
("applicationContext.xml"); //2.根據id獲取物件 UserDao userDao = (UserDao) applicationContext.getBean("userDao"); }
  1. 這樣就使用IOC的方式建立了UserDao的物件,當需求變更時(需要改變實現類)只需要改動xml檔案裡的class屬性即可。

2.依賴注入-DI

  • 修改類
  1. UserDaoMysqlImpl新增屬性值namesetter方法
public class UserDaoMysqlImpl implements UserDao{
    public String name;
    public void setName(String name){
    	this.name=name;
    }
}
  • DI注入(給屬性賦值)
  1. 前提必須有IOC的環境,即使用IOC建立了物件!
  2. 實現類當中的屬性要提供setter方法(如上)
  3. 在配置檔案當中配置依賴注入(配置bean和property標籤)
  • 傳統方式(也是給屬性賦值)
UserDao userDao = new UserDaoMysqlImpl();
userDao.name="lk"; //有的使用setName方法,但是同一個道理
  • DI注入
  1. 配置檔案修改
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl" >
        <!--要提供set方法才能注入成功-->
        <property name="name" value="lk"/>
</bean>
  1. 測試類
//1.載入配置檔案
ApplicationContext applicationContext=
new ClassPathXmlApplicationContext("applicationContext.xml");
//2.根據id獲取物件
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
System.out.println(userDao.name); //lk  (String型別)

3.Bean相關配置

  • 名稱與標識
  1. id:

使用了約束中的唯一約束。裡面不能出現特殊字元的

  1. name:

沒有使用約束中的唯一約束。裡面可以出現特殊字元。

  • 設定物件的生命週期方法
  1. 初始化:init-method

Bean被初始化的時候執行的方法

  1. 銷燬:destroy-method

Bean被銷燬的時候執行的方法(Bean是單例建立,工廠關閉)

<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl"  init-method="init"  destroy-method="destroy">
  • Bean的作用範圍的配置
  1. 單例模式預設
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl"  scope="singleton">
  1. 多例模式
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl"  scope="prototype">
  • 工廠例項化的方式
  1. 無參構造-預設
  2. 靜態工廠例項化(少用)
<bean id="userDao" class="com.itlike.demo1.UserDaoOraclelImpl"  factory-method="Xxx(方法名)">
  1. 例項工廠例項化(極少用)

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>