【框架】121:spring框架之IOC容器

2020-12-16 騰訊網

今天是劉小愛自學Java的第121天。

感謝你的觀看,謝謝你。

在spring核心配置文件中,有一個bean標籤,我們以前創建一個對象都是直接new。

而在spring中可以將對象交給spring管理,再通過spring工廠直接獲取。

所以我們也稱之為spring容器。

今天的學習內容就是關於bean標籤:

Bean的作用域:單例與多例說明。

Bean屬性依賴注入的兩種方式,以及p名稱空間、seEL表達式的引入。

補充說明一個IDEA插件。

一、bean的作用域

作用域也就是指:由spring創建的bean對象在什麼情況下有效?主要有單例和多例兩種。

在spring核心配置文件中可以配置對象是單例還是多例,通過scope屬性設定:

值為singleton即為單例,默認值,可省略。

值為prototype即為多例。

1單例測試

多次獲取單例對象,並列印輸出。

我們會發現:如果是單例的話,構造方法只運行一次,多次獲取的是同一個對象。

在spring IOC容器中僅存在一個bean實例,bean以單例方式存在。

注意:這邊我大致提下,昨天忘記說明了,通過spring工廠獲取對象時,參數可以是id,也可以是bean的類型,也就是對應接口/類的Class對象。

使用id獲取最穩妥,如果根據類型獲取,配置了多個類型的話,會拋出異常。

2多例測試

多次獲取單例對象,並列印輸出。

我們會發現:多例構造方法會運行多次,多次獲取的都是不同的對象。

每次從容器中調用bean時,都會返回一個新的實例,即每次調用getBean()的時候,相當於new了一次bean對象。

二、bean屬性的依賴注入

什麼是Bean屬性的依賴注入?

就可以理解成對一個對象的屬性賦值,這個我們昨天就接觸過,其有兩種注入方式:

1構造器參數注入 constructor-arg

創建Car類,定義構造方法

既然是通過構造器參數注入,那肯定需要有參構造方法,其中為了方便測試時觀看,還在該類中重寫一個toString方法。

spring配置構造器參數

constructor-arg:該標籤相當於在告訴spring容器,要調用有參構造方法了,不再調用默認的構造方法了。

所以必須要有有參構造方法,不然會報錯。

index:根據索引定位屬性,0表示首位。

name:根據屬性參數名稱定位屬性。

type:根據屬性數據類型定位屬性。

value:簡單的值,字符串。

ref:複雜的值,就是通過該屬性可以引用由spring容器創建的其它bean對象。

一般都是使用name屬性賦值,這樣最合理,也一目了然,name和type這兩種都不靠譜。

配置完成,做一個測試

根據運行結果我們能發現,通過spring的配置,可以給對象初始化賦值。

也就相當於new Car(1,"長安",20000)。

通過spring就不需要我們自己new了。

2setXXX方法屬性注入

和上述構造器參數注入的效果是差不多的,只不過setXXX方法更具有選擇性。

構造器參數注入有幾個參數都得設置,少一個都不行,而該方法想設置哪個就設置哪個。

創建Person類,定義setXXX方法

使用Lombok插件可以快速創建一個Javabean,這個插件文章最後有說明。

spring配置setXXX方法參數

property標籤:spring中專門進行setXXX屬性注入的標籤 。

name:setXXX方法的屬性名字,例如setXXX()那麼name的屬性值為XXX。

value:簡單的值。

ref:複雜的值,引用由spring容器創建的其它bean對象的名字。

配置完成,做一個測試

根據運行結果我們能發現,通過spring的setXXX方法屬性注入,也可以給對象賦值。

該方法也就相當於通過對象調用方法setId(1),setName(「劉小愛」)…

三、p名稱空間和spEL表達式

為簡化XML文件的配置,Spring2.5版本開始引入了一個新的p名稱空間。

準確地說,它的作用是為了簡化setXXX方法屬性依賴注入配置的,使用方式如下圖:

在配置文件表頭,引入p名稱空間。

可以將property標籤直接作為屬性使用。

如果是引用簡單對象,直接用屬性名說明即可,比如p:id,p:name。

如果是引用複雜對象,需要用ref來補充說明,比如p:car-ref。

通過上圖,我們能發現p名稱空間能進一步地簡化了代碼的編寫。

2spEL表達式

spEL全稱Spring Expression Language,一種表達式語言,和前面學的EL表達式很像。

語法:#{…} ,通過該表達式可以引用屬性、另一個Bean、甚至運算,方法都可以。

spEL表達式的使用功能比較多,Bean操作相關的通常有:

# 引用Bean,比如#。

# 引用Bean的屬性,比如#。

# 調用Bean的方法

附:補充一個Lombok插件

在idea開發工具中,選擇File-settings,找到Plugins,在搜索框中搜索lombok。

如果以前沒使用過該插件,右側下載即可。

插件下載好後,還需要導入依賴才能使用。

在maven網站中找到lombok,隨便選擇一個版本,將依賴複製到我們項目對應的pom文件中即可。

依賴導入完畢,就可以使用該插件了。

它有什麼用呢?

我們以前創建一個標準的JavaBean,有構造方法,有getset方法,有toString方法,一下子要寫很多方法。

但是現在有了lombok插件後,只需要在類上加一個注釋@Data,這些方法就都不用寫了。

最後

謝謝你的觀看。

如果可以的話,麻煩幫忙點個讚,謝謝你。

相關焦點

  • java~spring-ioc的使用
    spring-ioc的使用IOC容器在很多框架裡都在使用,而在spring裡它被應用的最大廣泛,在框架層面上,很多功能都使用了ioc技術,下面我們看一下ioc的使用方法。把服務註冊到ioc容器使用屬性注入反射對應類型的實例多態情況下,使用名稱反射類型的實例把服務註冊到ioc容器
  • Spring框架IoC核心詳解
    這是spring的核心,貫穿始終。所謂IoC,對於spring框架來說,就是由spring來負責控制對象的生命周期和對象間的關係。這是什麼意思呢,舉個簡單的例子,我們是如何找女朋友的?整個過程不再由我自己控制,而是有婚介這樣一個類似容器的機構來控制。Spring所倡導的開發方式就是如此,所有的類都會在spring容器中登記,告訴spring你是個什麼東西,你需要什麼東西,然後spring會在系統運行到適當的時候,把你要的東西主動給你,同時也把你交給其他需要你的東西。
  • java中spring入門
    1、spring的概念apache推出的java企業框架,提供了基於ioc的對象工廠、aop面向切面編程等功能及其他增強功能。 當前版本4.xxx,支持註解的配置。 springmvc。2、控制反轉(ioc):inversion of control。
  • spring框架之註解的使用
    2註解的使用①@Component註解相當於將對象存放到spring容器中。②@Autowired註解將ProductDao注入到了ProductService單獨使用@Autowired ,表示按照類型注入,會到spring容器中查找ProductDao的類型,對應<bean class=」」>中class的屬性值。
  • Java經典面試題Spring是什麼 Spring框架入門詳解
    到目前為止Sping框架就搭建完畢了。容器中。下面請看java代碼我們通過ClassPathXmlApplicationContext類傳入applicationContext.xml配置文件的相對路徑,創建出spring的容器對象ApplicationContext,在通過容器對象中的方法獲取到Spring容器為我們創建的user對象,其實Spring兩個容器,除了
  • Java中最強大的框架spring
    一、SSM框架概述這個框架啊,估計就跟婚姻一樣,也有七年之癢之說,以前呢也有一套框架叫SSH。久而久之之後就覺得這也不好那也不好,於是就出現了一套新的框架叫SSM。前面學過的jdbc、jdbcTemplate、mybatis都是和這層是相關的,SSH框架中的hibernate,還有後續要學的SpringDateJPA都是。而我們今天要學的spring框架也就對應著業務層:無論是SSM框架還是SSH框架都有Spring,足以證明其重要性。
  • 如何能理解 Spring 框架的思想?
    Spring 是一個輕量級的開源的 JavaEE 框架,由作者 Rod Johnson 創建,興起於 2003 年。目的是為了解決企業級開發的複雜性問題,Spring 出發點就是不重新造輪子,而是使現有的技術或框架更加易於使用。具有簡單,易於擴展和維護和低耦合等特點。
  • Java程式設計師必須要知道的Spring框架經典面試題
    spring現在Java的主流框架非Spring莫屬,Spring興起於2003年,spring最初的想法是想讓JAVA EE開發應該更加簡單,為JavaBean提供了一個更好的應用配置框架那麼經歷了10幾年的框架,已經成為了Java的主流框架,並且也有Spring自己體系。面對10幾年主流開發框架,必須要知道的Spring框架面試題你了解多少呢?
  • SSM框架集成之用戶登錄功能的實現
    咱們已經分享了Spring Mybatis SpringMVC 三個框架今天來把這三個框架整合一下>還記得之前又給大家分享過整合 Spring Mybatis 框架的項目,今天就在那個項目的基礎上,來把 springMVC 整合進去 SSM框架的整合
  • Java程式設計師必會 springmvc-spring-mybatis框架整合搭建傻瓜教程
    ssm是用於將springmvc-spring-mybatis三個框架整合來進行java開發web項目。本文通過ssm三大框架整合的形式講解springmvc的使用教程,最新的框架版本主流IDE,只要按照圖中步驟能夠保證每個人的框架搭建完成並成功運行。這裡使用maven來構建項目,我們需要創建一個名為ssm的maven項目,打包方式為war包。
  • spring原理詳解,兩大核心IOC和AOP
    大家好,我是java夢之旅,一個被Bug耽誤了才藝的程式設計師,專注於Java領域的知識分享和技術交流,每天會給大家帶來Java學習的乾貨教程,喜歡我的同學可以關注我,一起學習,一起加油!1.概念:spring是輕量級的開發框架;兩大核心IOC和AOP;包含完成特定功能的子框架。
  • Spring框架AOP核心詳解
    一般是方法的調用(3)Advice(通知):AOP在特定的切入點上執行的增強處理,有before,after,afterReturning,afterThrowing,around(4)Pointcut(切入點):就是帶有通知的連接點,在程序中主要體現為書寫切入點表達式(5)AOP代理:AOP框架創建的對象
  • 詳解Spring框架的AOP機制
    在業務流程執行過程中,Spring框架會根據業務流程要求,自動把獨立編寫的功能代碼切入到流程的合適位置。例如,在一個業務系統中,用戶登錄是基礎功能,凡是涉及到用戶的業務流程都要求用戶進行系統登錄。2、 實現AOP案例代碼在實現AOP案例之前,需要確定項目已經引入了Spring框架關於AOP功能的Jar包。下面列出的是spring-aop-5.0版本,其它版本也可以。
  • 面試題:如果不用Spring,你打算怎麼做開發工作
    那麼問題又來了,spring能幹嘛?我們為什麼要用spring呢?用spring有什麼好處?你們都知道麼?什麼是spring?Spring是一個開源框架,它由Rod Johnson創建。它是為了解決企業應用開發的複雜性而創建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。
  • 手擼rpc框架,並基於spring進行二次註解開發
    這是我返回給你的結果";該框架包括簡單示例都已上傳至github,連結自取:自定義rpc框架三、自定義rpc框架(一)、代碼架構rpc_api:和mybatis_spring一樣,將我們自定義的rpc框架整合到spirng中,使其使用時直接使用@AutoWired即可RpcRequest:通信時序列化傳輸的對象1. client
  • springMVC框架之運行流程圖解
    如果說我們前面學的mybatis對應著Dao層,spring對應著Service層。那springMVC就對應著Web層,它是spring框架為Web層提供的一個Web框架。我們以前是直接在Web層中創建servlet,使用框架比其更加地強大,本質上差不多。學習內容安排如下:Web層的MVC設計理念。
  • 深入理解Java Spring框架中的 IoC、DI概念
    IoC/DI 容器控制應用程式。控制什麼?IoC/DI 容器控制對象本身的創建、實例化;IoC/DI 容器控制對象之間的依賴關係。應用程式依賴於 IoC/DI 容器。為什麼需要依賴?因為發生了反轉,應用程式依賴的資源都是 IoC/DI 容器裡面。
  • 模仿Java 的 Spring 全家桶實現的一套 GoLang 的應用程式框架
    Go-Spring 項目簡介Go-Spring 是模仿 Java 的 Spring 全家桶實現的一套 GoLang 的應用程式框架,遵循「習慣優於配置」的原則,提供了依賴注入、自動配置、開箱即用、豐富的第三方類庫集成等功能,能夠讓程式設計師少寫很多的樣板代碼
  • 詳解Spring框架的依賴注入
    ● 理解基於構造函數的依賴注入● 理解基於設置函數的依賴注入● 基於自動裝配的依賴注入● 基於註解的依賴注入在Spring框架下,當Bean實例 A運行過程中需要引用另外一個Bean實例B時,Spring框架會創建Bean的實例B,並將實例B通過實例A的構造函數、set方法、自動裝配和註解方式注入到實例A,這種注入實例Bean到另外一個實例Bean的過程稱為依賴注入。
  • Spring 框架之 AOP 原理深度剖析!|CSDN 博文精選
    講解 Spring 框架中基於 Schema 的 AOP 實現原理。講解 Spring 框架中如何基於 AOP 實現的事務管理。/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsdhttp://www.springframework.org