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
BeanFactory纔是Spring容器中的頂層接口。 ApplicationContext是它的子接口。 BeanFactory和ApplicationContext的區別: 建立對象的時間點不同。 ApplicationContext:只要一讀取配置文件,默認狀況下就會建立對象。 BeanFactory:什麼使用何時建立對象。
此時咱們不須要經過瀏覽器訪問,因此打包方式選擇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>
業務層接口spring
/***
*業務層接口
****/
public interface AccountService {
/***
* 模擬保存帳號
*/
void saveAccount();
}
業務層接口實現類編程
/***
* 業務層接口實現類
***/
public class AccountServiceImpl implements AccountService {
//依賴問題待解決
private AccountDao accountDao = new AccountDaoImpl();
/***
* 模擬保存帳號
*/
public void saveAccount() {
accountDao.saveAccount();
}
}
持久層接口設計模式
/********
* 持久層接口
* 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("保存了帳戶!");
}
}
/********
* 模擬表現層用於調用Service
******/
public class Client {
public static void main(String[] args) {
//依賴問題待解決
AccountService accountService = new AccountServiceImpl();
accountService.saveAccount();
}
}
給配置文件導入約束:/spring-framework-5.0.2.RELEASE/docs/spring-framework-reference/html5/core.html框架
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