spring框架

1.Spring的兩大核心
IoC(Inverse Of Control:反轉控制)
  做用:削減計算機程序的耦合(解除咱們代碼中的依賴關係)
AOP(Aspect Oriented Programming:面向切面編程)
  做用:在程序運行期間,不修改源碼對已有方法進行加強  

2.Spring的優點
方便解耦,簡化開發
經過 Spring 提供的 IoC 容器,能夠將對象間的依賴關係交由 Spring 進行控制,避免硬編碼所形成的過分程序耦合。用戶也沒必要再爲單例模式類、屬性文件解析等這些很底層的需求編寫代碼,能夠更專一於上層的應用。

AOP 編程的支持
經過 Spring 的 AOP 功能,方便進行面向切面的編程,許多不容易用傳統 OOP 實現的功能能夠經過 AOP 輕鬆應付。

聲明式事務的支持
能夠將咱們從單調煩悶的事務管理代碼中解脫出來,經過聲明式方式靈活的進行事務的管理,提升開發效率和質量。

方便程序的測試
能夠用非容器依賴的編程方式進行幾乎全部的測試工做,測試再也不是昂貴的操做,而是隨手可作的事情。

方便集成各類優秀框架
Spring 能夠下降各類框架的使用難度,提供了對各類優秀框架(Struts、Hibernate、Hessian、 Quartz等)的直接支持。 下降 JavaEE API 的使用難度 Spring 對 JavaEE API(如 JDBC、 JavaMail、遠程調用等)進行了薄薄的封裝層,使這些 API 的使用難度大爲下降。 Java 源碼是經典學習範例 Spring 的源代碼設計精妙、結構清晰、匠心獨用,到處體現着大師對 Java 設計模式靈活運用以及對 Java 技術的高深造詣。它的源代碼無心是 Java 技術的最佳實踐的範例。
spring中工廠的類結構圖

3





3.1 BeanFactory和ApplicationContext的區別

BeanFactory纔是Spring容器中的頂層接口。
ApplicationContext是它的子接口。
BeanFactory和ApplicationContext的區別:
	建立對象的時間點不同。
		ApplicationContext:只要一讀取配置文件,默認狀況下就會建立對象。
		BeanFactory:什麼使用何時建立對象。



3.2 基於XML的配置(入門案例)

3.2.1 第一步:建立maven工程並導入座標

此時咱們不須要經過瀏覽器訪問,因此打包方式選擇jar便可。html

pom.xml的座標信息:html5


<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
 </dependencies>

爲了方便測試,能夠加入單元測試
<!--單元測試-->
<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.12</version>
</dependency>

 

3.2.2 第二步:建立業務層和接口實現類

業務層接口spring


/***
*業務層接口
****/
public interface AccountService {
   /***
    * 模擬保存帳號
    */
   void saveAccount();
}

業務層接口實現類編程


/***
* 業務層接口實現類
***/
public class AccountServiceImpl implements AccountService {
   //依賴問題待解決
   private AccountDao accountDao = new AccountDaoImpl();

   /***
    * 模擬保存帳號
    */
   public void saveAccount() {
       accountDao.saveAccount();
  }
}

 

 

3.2.3 第三步:建立持久層接口和實現類

持久層接口設計模式


/********
* 持久層接口
* version:1.0
******/
public interface AccountDao {
   /***
    * 模擬保存帳戶
    */
   void saveAccount();
}

持久層實現類瀏覽器


/********
* author:shenkunlin
* date:2018/7/9 15:26
* description:持久層實現類
* version:1.0
******/
public class AccountDaoImpl implements AccountDao {
   /**
    * 模擬保存帳戶
    */
   public void saveAccount() {
       System.out.println("保存了帳戶!");
  }
}

 

3.2.4 第四步:建立測試類


/********
* 模擬表現層用於調用Service
******/
public class Client {
   public static void main(String[] args) {
//依賴問題待解決
       AccountService accountService = new AccountServiceImpl();
       accountService.saveAccount();
  }
}

3.2.5 第五步:在類的根路徑下建立一個任意名稱的xml文件(不能是中文),咱們建立bean.xml

給配置文件導入約束:/spring-framework-5.0.2.RELEASE/docs/spring-framework-reference/html5/core.html框架


<?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">
</beans>

 

3.2.6 第六步:讓spring管理資源,在配置文件中配置service和dao


<?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標籤:用於配置讓spring建立對象,而且存入ioc容器之中
  id屬性:對象的惟一標識。
  class屬性:指定要建立對象的全限定類名
   -->
   <!-- 配置service -->
   <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>
   
   <!-- 配置dao -->
   <bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl"></bean>

</beans>

 

3.2.7 測試配置是否成功


public class Client {
/**
    * 使用main方法獲取容器測試執行
*/
   public static void main(String[] args) {
       //1.使用ApplicationContext接口,就是在獲取spring容器
       ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
       //2.根據bean的id獲取對象
       AccountService accountService = (AccountService) ac.getBean("accountService");
       System.out.println(accountService);

       AccountDao accountDao = (AccountDao) ac.getBean("accountDao");
       System.out.println(accountDao);
  }
}

日誌信息maven


信息: Loading XML bean definitions from class path resource [bean.xml]
com.itheima.service.impl.AccountServiceImpl@61832929
com.itheima.dao.impl.AccountDaoImpl@29774679
相關文章
相關標籤/搜索