找人做網(wǎng)站協(xié)議網(wǎng)站在線優(yōu)化檢測
軟件設(shè)計之SSM(1)
路線圖推薦:
【Java學(xué)習(xí)路線-極速版】【Java架構(gòu)師技術(shù)圖譜】
尚硅谷新版SSM框架全套視頻教程,Spring6+SpringBoot3最新SSM企業(yè)級開發(fā)
資料可以去尚硅谷官網(wǎng)免費領(lǐng)取
學(xué)習(xí)內(nèi)容:
- Spring框架結(jié)構(gòu)
- SpringIoC容器
- SpringIoC實踐與應(yīng)用
1、Spring框架結(jié)構(gòu)
Spring是一個開源的Java框架,旨在簡化Java企業(yè)級應(yīng)用的開發(fā)。Spring Framework是其核心部分,提供了依賴注入、面向切面編程和事務(wù)管理等功能。所以一般Spring框架指的是Spring Framework,廣義上的 Spring 泛指以 Spring Framework 為基礎(chǔ)的 Spring 技術(shù)棧。
Spring Framework主要功能模塊
模塊 | 功能描述 |
---|---|
核心容器 | 提供對象管理和依賴注入,支持Bean配置和生命周期管理。 |
AOP | 支持面向切面編程,允許將橫切關(guān)注點(如日志、事務(wù))與業(yè)務(wù)邏輯分離。 |
數(shù)據(jù)訪問/集成 | 簡化JDBC操作,支持ORM框架(如Hibernate),提供數(shù)據(jù)訪問的統(tǒng)一方式。 |
Web模塊 | 支持Spring MVC架構(gòu),創(chuàng)建Web應(yīng)用程序,提供REST支持和文件上傳功能。 |
安全模塊 | 提供Spring Security,用于應(yīng)用程序的身份驗證和授權(quán)。 |
消息模塊 | 提供對消息中間件(如JMS)的支持,支持異步處理。 |
聲明式事務(wù)管理 | 通過注解或XML配置簡化事務(wù)管理,允許在方法上聲明事務(wù)屬性,自動處理事務(wù)邊界。 |
2、SpringIoC容器
-
在Spring框架中,組件是指由Spring容器管理的對象,通常被稱為Bean。這些Bean可以是服務(wù)、控制器、數(shù)據(jù)訪問對象等,Spring負(fù)責(zé)它們的創(chuàng)建、配置和生命周期管理。
-
組件管理是Spring的核心功能之一,主要通過IoC(控制反轉(zhuǎn)) 實現(xiàn)。IoC容器負(fù)責(zé)管理對象的創(chuàng)建和它們之間的依賴關(guān)系,這使得應(yīng)用程序的各個部分之間的耦合度降低,從而提高了可維護(hù)性和可測試性。
組件一定是對象,對象不一定是組件
-
組件是對象:
- 在Spring框架中,組件(通常稱為Bean)是通過Spring IoC容器管理的對象。它們的創(chuàng)建、配置和生命周期管理都是由Spring負(fù)責(zé)。
-
對象不一定是組件:
- 在Java中,任何通過
new
關(guān)鍵字創(chuàng)建的實例都是對象,但這些對象并不一定由Spring容器管理。如果一個對象沒有被Spring管理,就不能享受Spring提供的特性,比如依賴注入、生命周期管理等。
- 在Java中,任何通過
-
可復(fù)用的Java對象:
- 組件通常被設(shè)計為可以在不同的上下文中
重復(fù)使用
。因為它們遵循了良好的設(shè)計原則,比如單一職責(zé)原則和依賴注入,它們的邏輯可以在不同的場景中使用,而不需要進(jìn)行大量修改。
- 組件通常被設(shè)計為可以在不同的上下文中
復(fù)雜容器概念引入
- 復(fù)雜容器指的是具有多個層次和功能的容器,能夠管理和控制多個組件的生命周期、配置和交互。Tomcat不僅負(fù)責(zé)Servlet的執(zhí)行,還處理了許多其他功能,如請求處理、線程管理、會話管理等。
- Spring IoC 容器,負(fù)責(zé)實例化、配置和組裝 bean(組件)。容器通過讀取配置元數(shù)據(jù)來獲取有關(guān)要實例化、配置和組裝組件的指令。配置元數(shù)據(jù)以 XML、Java 注解或 Java 代碼形式表現(xiàn)。它允許表達(dá)組成應(yīng)用程序的組件以及這些組件之間豐富的相互依賴關(guān)系。
IoC容器接口介紹
Spring IoC容器主要通過兩個接口來實現(xiàn):BeanFactory和ApplicationContext。它們都負(fù)責(zé)管理Bean,但有一些關(guān)鍵的區(qū)別和擴展功能。
特性 | BeanFactory | ApplicationContext |
---|---|---|
定義 | Spring IoC容器的基本接口 | BeanFactory的子接口,提供更豐富的功能 |
實例化方式 | 延遲初始化,僅在需要時創(chuàng)建Bean | 預(yù)實例化,在啟動時創(chuàng)建所有單例Bean |
國際化支持 | 無 | 支持多種語言和地區(qū)的國際化功能 |
事件傳播 | 無 | 支持事件發(fā)布和監(jiān)聽機制,允許組件間的通信 |
AOP支持 | 無 | 提供面向切面編程的支持 |
適用場景 | 輕量級應(yīng)用,資源使用要求較高的場景 | 復(fù)雜應(yīng)用,特別是需要更多功能的企業(yè)級應(yīng)用 |
ApplicationContext容器實現(xiàn)類
上下文類型 | 功能描述 | 加載方式說明 |
---|---|---|
ClassPathXmlApplicationContext | 從類路徑加載XML配置文件,適用于在類路徑下有配置文件的應(yīng)用,通常用于標(biāo)準(zhǔn)的Java SE應(yīng)用。 | 從classpath根目錄加載配置文件,通常是項目的類路徑下的resources |
FileSystemXmlApplicationContext | 從文件系統(tǒng)加載XML配置文件,適用于需要從任意路徑加載配置文件的場景,能夠處理絕對或相對路徑。 | 直接從文件系統(tǒng)讀取配置文件,可以使用絕對路徑或相對路徑。 |
AnnotationConfigApplicationContext | 以Java注解方式加載配置,適合使用注解定義Bean和依賴關(guān)系的應(yīng)用,支持使用@Configuration 和@Component 注解。 | 通過掃描指定包或類,解析注解以注冊Bean。 |
WebApplicationContext | 特殊類型的ApplicationContext,用于Web應(yīng)用,提供額外的功能,如處理Web層的Bean、會話管理等,支持多種Web功能。 | 通常在Web應(yīng)用中由ContextLoaderListener 或DispatcherServlet 加載,支持XML 和注解配置。 |
配置方式
Spring框架提供了多種配置方式:XML配置方式、注解方式和Java配置類方式
特點 | XML配置 | Java配置 | 注解配置 |
---|---|---|---|
配置形式 | 使用XML文件定義Bean | 使用帶有@Configuration 注解的類定義Bean | 使用類上的注解(如@Component 等)自動掃描 |
類型安全 | 否 | 是 | 是 |
可讀性 | 可讀性一般,依賴于XML格式 | 可讀性好,遵循Java語法 | 可讀性好,直接在類上定義 |
靈活性 | 靈活,但修改后需重啟應(yīng)用 | 靈活,支持Java編程中的邏輯 | 靈活,支持靈活的包掃描 |
示例 | <bean id="myBean" class="com.example.MyClass"/> | @Bean public MyClass myBean() {...} | @Component public class MyClass {...} |
依賴注入方式 | 通過<property> 或<constructor-arg> 標(biāo)簽 | 通過方法參數(shù)和返回值 | 通過構(gòu)造函數(shù)、字段或方法 |
啟動方式 | 需要手動指定XML文件 | 通過Java類自動加載配置 | 通過@ComponentScan 自動掃描 |
容器、IoC、DI
3、SpringIoC實踐與應(yīng)用
實現(xiàn)步驟
- 配置元數(shù)據(jù),此處以XML為例
-
Spring IoC 容器管理一個或多個組件。這些組件是使用你提供給容器的配置元數(shù)據(jù)(例如,以 XML
<bean/>
定義的形式)創(chuàng)建的。 -
<bean /> 標(biāo)簽 == 組件信息聲明
-
id
屬性是標(biāo)識單個 Bean 定義的字符串。
-
class
屬性定義 Bean 的類型并使用完全限定的類名。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 此處要添加一些約束,配置文件的標(biāo)簽并不是隨意命名 -->
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="..." [1] class="..." [2]> <!-- collaborators and configuration for this bean go here --></bean><bean id="..." class="..."><!-- collaborators and configuration for this bean go here --></bean><!-- more bean definitions go here -->
</beans>
- 實例化IoC容器
- 提供給
ApplicationContext
構(gòu)造函數(shù)的位置路徑是資源字符串地址,允許容器從各種外部資源(如本地文件系統(tǒng)、JavaCLASSPATH
等)加載配置元數(shù)據(jù)。 - 選擇一個合適的容器實現(xiàn)類,進(jìn)行IoC容器的實例化工作:此處以ClassPathXmlApplicationContext為例
//實例化ioc容器,讀取外部配置文件,最終會在容器內(nèi)進(jìn)行ioc和di動作
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
- 獲取Bean(組件)
ApplicationContext
是一個高級工廠的接口,能夠維護(hù)不同 bean 及其依賴項的注冊表。通過使用方法T getBean(String name, Class<T> requiredType)
,可以檢索 bean 的實例。允許讀取 Bean 定義并訪問它們,如以下示例所示:
//創(chuàng)建ioc容器對象,指定配置文件,ioc也開始實例組件對象
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
//獲取ioc容器的組件對象
PetStoreService service = context.getBean("petStore", PetStoreService.class);
//使用組件對象
List<String> userList = service.getUsernameList();