<Java讀書筆記>之Spring實(shí)戰(zhàn)Part1(第4版)

本文主要介紹了Spring的相關(guān)知識(shí).

一.Spring的概念.

Spring是一個(gè)開源框架,是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建.
Spring的根本使命:簡(jiǎn)化Java開發(fā).
具體簡(jiǎn)化策略:

  • 基于POJO的輕量級(jí)和最小侵入性編程.
  • 通過依賴注入和面向接口實(shí)現(xiàn)松耦合.
  • 基于切面和慣例進(jìn)行聲明式編程.
  • 通過切面和模板減少樣板式代碼.
1.POJO

POJO(Plain Ordinary Java Object)是一個(gè)簡(jiǎn)單的普通的Java對(duì)象,它不包含業(yè)務(wù)邏輯或持久邏輯,不是JavaBean, EntityBean等.POJO不擔(dān)當(dāng)任何特殊的角色,也不實(shí)現(xiàn)任何特殊的Java框架的接口.

2.依賴注入
  • 對(duì)象的依賴關(guān)系將有負(fù)責(zé)協(xié)調(diào)系統(tǒng)中各個(gè)對(duì)象的第三方組件在創(chuàng)建對(duì)象時(shí)設(shè)定,對(duì)象無需自行創(chuàng)建或管理他們的依賴關(guān)系,依賴關(guān)系將被自動(dòng)注入到需要它們的對(duì)象中去.
  • 組件不做定位查詢,只提供普通的Java方法讓容器去決定依賴關(guān)系.容器全權(quán)負(fù)責(zé)組件的裝配,它會(huì)把符合依賴關(guān)系的對(duì)象通過JavaBean屬性或者構(gòu)造函數(shù)傳遞給需要的對(duì)象.
3.AOP

通過預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù).

二.Spring的核心.

容器是Spring框架的核心.
Spring容器分為以下兩種類型

  • bean工廠
  • 應(yīng)用上下文.(下面主要講解通過應(yīng)用上下文管理bean)
1.應(yīng)用上下文

Spring中自帶的多種應(yīng)用上下文,分別為:

  • AnnotationConfigApplicationContext:
    從一個(gè)或多個(gè)基于Java的配置類中加載Spring應(yīng)用上下文
    例子:
    ApplicationContext context = new AnnotationConfigApplicationContext(com.springinaction.knights.config.KnightConfig.class);
    
  • AnnotationConfigWebApplicationContext:
    從一個(gè)或多個(gè)基于Java的配置類中加載Spring Web應(yīng)用上下文
  • ClassPathXmlApplicationContext:
    從類路徑下的一個(gè)或多個(gè)XML配置文件中加載上下文定義,把應(yīng)用上下文的定義文件作為類資源.
    例子:
    ApplicationContext context = new ClassPathXmlApplicationContext(knight.xml);
    
  • FileSystemXmlApplicationContext:
    從文件系統(tǒng)下的一個(gè)或多個(gè)XML配置文件中加載上下文定義
    例子:
    ApplicationContext context = new FileSystemXmlApplicationContext(c:/knight.xml);
    
  • XmlWebApplicationContext:
    從Web應(yīng)用下的一個(gè)或多個(gè)XML配置文件中加載上下文定義
2.bean生命周期.
  • Spring對(duì)bean進(jìn)行實(shí)例化.
  • Spring將值和bean的引用注入到bean對(duì)應(yīng)的屬性中.
  • 如果 bean 實(shí)現(xiàn)BeanNameAware接口,Spring將bean的ID傳遞給setBeanName()方法.
  • 如果bean實(shí)現(xiàn)了BeanFactoryAware接口,Spring將調(diào)用setBeanFactory()方法,將BeanFactory容器實(shí)例傳入.
  • 如果bean實(shí)現(xiàn)了ApplicationContextAware接口,Spring將調(diào)用setApplicationContext()方法,將bean所在的應(yīng)用上下文的引用傳入進(jìn)來.
  • 如果bean實(shí)現(xiàn)了BeanPostProcessor接口,Spring將調(diào)用它們的postProcessBeforeInitialization()方法.
  • 如果bean實(shí)現(xiàn)了InitializingBean接口,Spring將調(diào)用它們的afterPropertiesSet()接口方法.類似的,如果bean使用init-method聲明了初始化方法,該方法也會(huì)被調(diào)用.
  • 如果bean實(shí)現(xiàn)了BeanPostProcessor接口,Spring將調(diào)用它們的postProcessAfterInitialization()方法.
  • 此時(shí),bean將駐留在應(yīng)用上下文中,直到應(yīng)用上下文被銷毀.
  • 如果bean實(shí)現(xiàn)了了DisposableBean接口,Spring將調(diào)用它的Destroy()接口方法.如果bean使用destroy-method聲明了銷毀方法,該方法也會(huì)被調(diào)用.

三.Spring的模塊劃分.

Data access &integration Web and romoting AOP Instrumentation Core Spring container Test
JDBC Web AOP Instrument Beans Test
ORM Servlet Aspects Instrument Tomcat Core
Transaction Portlet Context
OXM Struts Expression
JMS Contextsupport
四.總結(jié).

Spring是一個(gè)框架,這個(gè)框架的核心是容器,現(xiàn)在大部分使用的容器類型是應(yīng)用上下文,Spring主要通過應(yīng)用上下文去管理bean.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評(píng)論 19 139
  • 1.1 spring IoC容器和beans的簡(jiǎn)介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器,...
    simoscode閱讀 6,863評(píng)論 2 22
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,288評(píng)論 6 342
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,970評(píng)論 1 92
  • Lynda - 小球彈跳動(dòng)畫AE教程 這兩天在做一個(gè)跟球類運(yùn)動(dòng)相關(guān)的項(xiàng)目,就找到了這個(gè)教程。 不用借助三維軟件,直...
    Zonlily閱讀 4,022評(píng)論 0 0

友情鏈接更多精彩內(nèi)容