摘要:多例類型,表示每次從容器中都會獲取到一個對應定義全新的實例。僅適用于環境下的,表示每一個生命周期內會有一個多帶帶的實例,即每一個請求都會擁有一個多帶帶的實例。將單個定義范圍限定為的生命周期。僅在的上下文中有效。
注意我的 Spring 版本是 5.1.2.RELEASE, 并且主要使用注解配置. 如果你需要使用 xml 配置, 我想這篇文章應該不適合你.IoC容器
IoC就是控制反轉, 也叫依賴注入(DI).
比如, 我們現在有 A B 兩個類, A 類依賴 B 類在容器在創建 Bean(對象) 的時候, 會注入這些依賴也就是將 B 對象注入到 A 對象中.
依賴注入方式 構造方法注入private TestService testService; @Autowired public ScsController(TestService testService){ this.testService = testService; }通過屬性注入
@Autowired private TestService testService;
不管是根據構造方法注入還是通過屬性注入 @Autowired 注解都是必不可少的. @Autowired 注解默認是按照類型進行注入的, 如果沒有出現指定類型 Bean 時(TestService Bean) 測可以設置 required=false 表示在用到的時候進行注入.
有些情況下我們可能需要名稱進行注入, 可以配合 @Qualifier 注解一起使用.
@Autowired @Qualifier("testService") private TestService testService;Bean
在 Spring 中, bean 是一個由 Spring IoC 容器實例化, 組裝和管理的對象.
容器幫我們管理的 Bean 都表示一個 BeanDefinition 對象, 這個對象的主要作用就是幫我們來描述 Bean 的 class 類型、構造函數參數列表、scope、屬性、依賴項等等. 當容器注冊 Bean 的時候就會使用 BeanDefinitionRegistry 來幫我們進行注冊; 當我們如果要從容器中獲取一個 Bean 時, 則需要使用 BeanFactory.
也就是說 BeanDefinition 就是用來描述 Bean, BeanDefinitionRegistry 用來注冊和管理BeanDefinition, BeanFactory 用來管理 Bean.
要注意的是 BeanFactory 采用延遲初始化策略: 只有當訪問容器中的某個對象時, 才對該對象進行初始化和依賴注入操作.
還有一個比它更高級的叫做 ApplicationContext 除了具有 BeanFactory 的所有能力之外, 還提供對事件監聽機制以及國際化的支持等.
ApplicationContext 構建在 BeanFactory 上, 并且在容器啟動時全部完成初始化和依賴注入操作.Bean 作用范圍(scope)
范圍 | 說明 |
---|---|
singleton | 這是默認Scope,表示在整個bean容器中或者說是整個應用中只會有一個實例。 |
prototype | 多例類型,表示每次從bean容器中都會獲取到一個對應bean定義全新的實例。 |
request | 僅適用于Web環境下的ApplicationContext,表示每一個HttpRequest生命周期內會有一個多帶帶的實例,即每一個Http請求都會擁有一個多帶帶的實例。 |
session | 僅適用于Web環境下的ApplicationContext,表示每一個HttpSession生命周期內會有一個多帶帶的實例,即每一個HttpSession下都會擁有一個多帶帶的實例,即每一個用戶都將擁有一個多帶帶的實例。 |
application | 僅適用于Web環境下的ApplicationContext,表示在ServletContext生命周期內會擁有一個多帶帶的實例,即在整個ServletContext環境下只會擁有一個實例。 |
websocket | 將單個bean定義范圍限定為WebSocket的生命周期。 僅在Web Spring ApplicationContext的上下文中有效。 |
可以通過注解 @Scope 進行指定
@Component @Scope("prototype") public class Hello { }
如果作用范圍是 request session application 則可以使用相應的 @RequestScope @SessionScope @ApplicationScope 注解.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72450.html
摘要:的兩大核心機制是控制反轉和面向切面編程,對于初學者來講,搞清楚這兩個核心機制就掌握了的基本應用。配置對象張三添加標簽對應屬性名,是屬性的值。若包含特殊字符,比如張三,使用張三進行配置,如下所示。 前言 對于任何一個 Java 開發人員,Spring 的大名一定如雷貫耳,在行業中可謂是無人不知、無人不曉,說它是 Java 領域第一框架毫不為過。 showImg(https://segme...
摘要:甲乙交易活動不需要雙方見面,避免了雙方的互不信任造成交易失敗的問題。這就是的核心思想。統一配置,便于修改。帶參數的構造函數創建對象首先,就要提供帶參數的構造函數接下來,關鍵是怎么配置文件了。 前言 前面已經學習了Struts2和Hibernate框架了。接下來學習的是Spring框架...本博文主要是引入Spring框架... Spring介紹 Spring誕生: 創建Spring的...
摘要:依賴注入是向某個類或方法注入一個值,其中所用到的原理就是控制反轉。但發現更多時間是在調和的源碼。里面就是從中取出這個,完成控制反轉的。控制反轉的優點最后來以我個人觀點談談控制反轉的優點吧。控制反轉為了降低項目耦合,提高延伸性。 本章開始來學習下Spring的源碼,看看Spring框架最核心、最常用的功能是怎么實現的。網上介紹Spring,說源碼的文章,大多數都是生搬硬推,都是直接看來的...
摘要:模塊負責的所有面向切面的功能。總結的統一管理,降低了對象之間的耦合對主流的框架提供了很好的集成支持提供眾多組件,事務管理,等具有高度可開放性,開發者可以自由選擇部分或全部主要使用工廠模式和代理模式。 聊完了Spring框架中最重要的兩種設計模式,我們來看一下Spring框架的模塊和結構圖。 Spring框架的結構 下圖是Spring官方給出的Spring框架的結構圖。 showImg(...
摘要:從而能夠進一步深入了解框架。至此我們框架開發完成。雖然說閱讀源碼是了解框架的最終手段。但是框架作為一個生產框架,為了保證通用和穩定,源碼必定是高度抽象,且處理大量細節。下一篇文章應該會是徒手擼框架實現。 原文地址:https://www.xilidou.com/2018/... Spring 作為 J2ee 開發事實上的標準,是每個Java開發人員都需要了解的框架。但是Spring 的...
閱讀 3759·2021-11-25 09:43
閱讀 2191·2021-11-23 10:13
閱讀 823·2021-11-16 11:44
閱讀 2369·2019-08-29 17:24
閱讀 1384·2019-08-29 17:17
閱讀 3480·2019-08-29 11:30
閱讀 2584·2019-08-26 13:23
閱讀 2345·2019-08-26 12:10