1. 程式人生 > 實用技巧 >Java基礎學習筆記-String&StringBuilder

Java基礎學習筆記-String&StringBuilder

主要模組

  • Spring Core:核心類庫,提供IOC服務。
  • Spring Context:提供框架式的Bean訪問方式。
  • Spring AOP:AOP服務。
  • Spring DAO:對JDBC的抽象。
  • Spring ORM:對現有的ORM框架的支援。
  • Spring Web:提供了面向Web的綜合特性。
  • Spring MVC:提供了向Web應用的MVC實現。

IOC

  • 優點:控制反轉,物件的建立交給Spring配置。

  • 步驟:建立配置檔案,配置要建立的物件類;建立工廠類,解析配置檔案+反射。

AOP

  • 優點:面向切面程式設計,擴充套件功能不通過修改原始碼實現。

  • 靜態AOP:編譯期,切面以位元組碼的形式直接編譯到目標位元組碼中。

  • 動態AOP:執行期,類載入後,為介面實現動態代理類,將切面植入到動態代理類中。

設計模式

  • 單例:一個Spring Bean容器(SpringContext)中僅有一個例項。
  • 工廠:IOC,封裝了建立Bean的過程,不通過new而是通過工廠來獲取物件。
  • 代理:AOP,代理類中持有一個被代理的例項,通過代理類呼叫被代理物件的方法,在方法前後加入其他方法處理邏輯。
  • 介面卡:SpringMVC中的HandleAdapter。轉換類的介面。場景:第三方登入自由適配。
  • 責任鏈:SpringMVC中的DispatchServlet。Handler定義處理請求的介面;ConcreteHandler
    選擇處理請求或者傳遞請求給下家。場景:讓一個以上的物件有機會處理某個請求。

Bean生命週期

  • 建立

    • 例項化Bean。

    • 注入Bean ID,Bean Factory或者ApplicationContext。

    • 呼叫前置初始化方法postProcessBeforeInitialization。

    • 呼叫afterPropertiesSet方法。

    • 呼叫Bean自身的初始化方法。

    • 呼叫Bean的後置初始化方法postProceeAfterInitialization。

  • 銷燬

    • 呼叫DisposableBean的destroy方法。
    • 呼叫自身定製的destroy方法。

Bean作用域

類別 說明
singleton 每個IOC容器中僅存在一個Bean例項
prototype 每次從容器中呼叫Bean時,會返回新的例項
request 每次Http請求會建立一個新的Bean,作用域僅適用於WebApplicationContext
session 同一個session共享一個Bean,作用域僅適用於WebApplicationContext

配置Bean的方法

  • 基於xml的配置方式

  • 基於註解的配置方式

    • 定義註解:@Component,@Controller,@Repository,@Service
    • 生命週期註解:@PostConstruct,@PreDestroy
    • 依賴檢查註解
    • 自動裝配註解:@Autowired
  • 基於Java類的配置:@Configuration,@Bean

注入屬性的方法

  • Setter注入,構造器注入,註解注入,介面注入。

迴圈依賴

  • 兩個以上的Bean互相持有對方:構造器的迴圈依賴;屬性的迴圈依賴。

  • 解決方法:先從一級快取singletonObjects獲取物件(例項化完成的Bean),若獲取不到且物件正在建立中,則從二級快取earlySingletonObjects中獲取物件,若獲取不到物件(未裝配屬性的Bean),則從三級快取singletonFactory.getObjects()獲取(例項化的BeanFactory)。

  • 關鍵:呼叫構造器,根據物件引用定位到堆中的物件,提前曝光物件。

父子容器

  • Spring父容器(包含mapper,service,dao等),SpringMVC子容器(包含controller等)。
  • 子容器可以訪問父容器中的物件,父容器不能訪問子容器中的物件。

事務實現原理

  • 劃分處理單元IOC:用Spring中的IOC劃分事務處理單元,將對事務的各種配置放到了IOC容器中。
  • AOP攔截需要進行事務處理的類:生成代理物件,通過TransactionIntercepter完成對代理方法的攔截,將事務處理的功能編織到攔截的方法中。讀取IOC事務配置屬性,轉化為事務處理所需要的內部資料結構。
  • 事務的處理實現:委託給具體的事務處理器(TransactionManager)實現。

類載入機制

  • 過程:1、載入:生成class物件;2、驗證;3、準備:static變數分配記憶體和初始值;4、解析:符號引用替換為直接引用;5、初始化:父類沒初始化需先初始化。(家宴準解出
  • 雙親委派機制:避免重複載入,安全。

Spring事務傳播機制

  • 控制當前事務如何被傳播到呼叫的介面方法中
事務傳播行為型別 沒有當前事務 存在事務
required 新建 加入
supports 非事務 支援
mandatory 異常 使用
requires_new 新建 掛起
not_supported 非事務 掛起
never 非事務 異常
nested 新建 巢狀

BeanFactory和ApplicationContext的區別

  • BeanFactory:控制Bean的生命週期,維護Bean的依賴關係;延遲載入。
  • ApplicationContext: BeanFactory的子介面,提供更加完整的框架功能。容器啟動時,一次性建立所有的Bean。

Spring Boot的啟動流程

  • 建立SpringApplicationRunListener
    • 通知Starting
  • 配置Environment
    • 通知environmentPrepared
  • 建立ApplicationContext
  • 初始化ApplicationContext,設定Environment載入相關配置
    • 通知contextPrepard,contextLoaded
  • Refresh ApplicationContext
    • 通知Started
  • 完成啟動
    • 通知running
  • OVER

Spring框架中的事件

  • Spring事件由ApplicationContext釋出。
    • ContextStartedEvent事件:ApplicationContext啟動後觸發。
    • ContextStopedEvent事件:ApplicationContext停止後觸發。
    • ContextRefreshedEvent事件:ApplicationContext重新整理後觸發。
    • ContextClosedEvent事件:ApplicationContext關閉後觸發。
  • Bean實現了ApplicationListener介面,當一個ApplicationEvent被髮布後,bean會自動被通知。