成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring IoC學(xué)習(xí)總結(jié)

silencezwm / 1521人閱讀

摘要:學(xué)習(xí)總結(jié)學(xué)習(xí)整理的一些筆記,很簡(jiǎn)單。大部分認(rèn)為和只是不同的叫法而已。依賴注入的兩種方式和注解使用注釋驅(qū)動(dòng)的功能源碼剖析

Spring IoC學(xué)習(xí)總結(jié)

學(xué)習(xí)spring Ioc整理的一些筆記,很簡(jiǎn)單。分享給大家。

IoC 基本概念

在這之前,我們先記住一句話。好萊塢原則:Don"t call us, we will call you.
其實(shí)這句話很恰當(dāng)?shù)匦稳萘恕胺崔D(zhuǎn)”的意味;
Ioc, Inversion of Control,控制反轉(zhuǎn),它還有一個(gè)別名叫“依賴注入”(DI Dependency Injection)。IoC不是什么技術(shù),而是一種設(shè)計(jì)思想。在Java開發(fā)中,Ioc意味著將你設(shè)計(jì)好的對(duì)象交給容器控制,而不是傳統(tǒng)的在你的對(duì)象內(nèi)部直接控制。如何理解好Ioc呢?理解好Ioc的關(guān)鍵是要明確“誰控制誰,控制什么,為何是反轉(zhuǎn)(有反轉(zhuǎn)就應(yīng)該有正轉(zhuǎn)了),哪些方面反轉(zhuǎn)了”

誰控制誰,控制什么:傳統(tǒng)Java SE程序設(shè)計(jì),我們直接在對(duì)象內(nèi)部通過new進(jìn)行創(chuàng)建對(duì)象,是程序主動(dòng)去創(chuàng)建依賴對(duì)象;而IoC是有專門一個(gè)容器來創(chuàng)建這些對(duì)象,即由Ioc容器來控制對(duì) 象的創(chuàng)建;誰控制誰?當(dāng)然是IoC 容器控制了對(duì)象;控制什么?那就是主要控制了外部資源獲?。ú恢皇菍?duì)象包括比如文件等)。

為何是反轉(zhuǎn),哪些方面反轉(zhuǎn)了:有反轉(zhuǎn)就有正轉(zhuǎn),傳統(tǒng)應(yīng)用程序是由我們自己在對(duì)象中主動(dòng)控制去直接獲取依賴對(duì)象,也就是正轉(zhuǎn);而反轉(zhuǎn)則是由容器來幫忙創(chuàng)建及注入依賴對(duì)象;為何是反轉(zhuǎn)?因?yàn)橛扇萜鲙臀覀儾檎壹白⑷胍蕾噷?duì)象,對(duì)象只是被動(dòng)的接受依賴對(duì)象,所以是反轉(zhuǎn);哪些方面反轉(zhuǎn)了?依賴對(duì)象的獲取被反轉(zhuǎn)了。

還有一個(gè)概念:DI 依賴注入。大部分認(rèn)為IoC和DI只是不同的叫法而已。
理解DI的關(guān)鍵是:“誰依賴誰,為什么需要依賴,誰注入誰,注入了什么

誰依賴于誰:當(dāng)然是應(yīng)用程序依賴于IoC容器;

為什么需要依賴:應(yīng)用程序需要IoC容器來提供對(duì)象需要的外部資源;

誰注入誰:很明顯是IoC容器注入應(yīng)用程序某個(gè)對(duì)象,應(yīng)用程序依賴的對(duì)象;

注入了什么:就是注入某個(gè)對(duì)象所需要的外部資源(包括對(duì)象、資源、常量數(shù)據(jù))。

Spring IoC

我理解的spring IoC分為兩部分:Bean實(shí)例的創(chuàng)建依賴注入;

Spring IoC容器如何實(shí)例化Bean呢?傳統(tǒng)應(yīng)用程序可以通過new和反射方式進(jìn)行實(shí)例化Bean。而Spring IoC容器則需要根據(jù)Bean定義里的配置元數(shù)據(jù)使用反射機(jī)制來創(chuàng)建Bean。(大家可以了解一下Java的反射機(jī)制,這是Spring Ioc實(shí)現(xiàn)Bean實(shí)例化的核心機(jī)制)在Spring IoC容器中根據(jù)Bean定義創(chuàng)建Bean主要有以下幾種方式:

使用構(gòu)造器實(shí)例化Bean 有參/無參

使用靜態(tài)工廠實(shí)例化Bean

使用實(shí)例工廠實(shí)例化Bean

  
  
      
   
  
  
      
 

  
  
       


  
  
  
  
   

另外,靜態(tài)工廠和實(shí)例工廠方法還有對(duì)應(yīng)的靜態(tài)工廠類和實(shí)例工廠類

/**
*   靜態(tài)工廠類
*
**/
public class DemoStaticFactory {  
    //工廠方法  
       public static HelloApi newInstance(String message) {  
              //返回需要的Bean實(shí)例  
           return new Demo(message);  
}  
}  

/**
*   實(shí)例工廠類
*
**/
package com.java.spring;  
public class DemoInstanceFactory {  
public HelloApi newInstance(String message) {  
          return new Demo(message);  
   }  
} 

這一塊補(bǔ)充一個(gè)細(xì)節(jié)。Spring什么時(shí)候?qū)嵗痓ean,首先要分2種情況:

第一:如果你使用BeanFactory作為Spring Bean的工廠類,則所有的bean都是在第一次使用該Bean的時(shí)候?qū)嵗?/p>

第二:如果你使用ApplicationContext作為Spring Bean的工廠類,則又分為以下幾種情況:

   (1):如果bean的scope是singleton的,并且lazy-init為false(默認(rèn)是false,所以可以不用設(shè)置),則ApplicationContext啟動(dòng)的時(shí)候就實(shí)例化該Bean,并且將實(shí)例化的Bean放在一個(gè)map結(jié)構(gòu)的緩存中,下次再使用該Bean的時(shí)候,直接從這個(gè)緩存中取 
   (2):如果bean的scope是singleton的,并且lazy-init為true,則該Bean的實(shí)例化是在第一次使用該Bean的時(shí)候進(jìn)行實(shí)例化 
   (3):如果bean的scope是prototype的,則該Bean的實(shí)例化是在第一次使用該Bean的時(shí)候進(jìn)行實(shí)例化 

通常使用ApplicationContext作為容器的。

使用@Autowire注解注入的時(shí)機(jī)則是容器剛啟動(dòng)的時(shí)候就開始注入;注入之前要先初始化bean;
ApplicationContext 的初始化和BeanFactory 有一個(gè)重大的區(qū)別:BeanFactory在初始化容器時(shí),并未實(shí)例化Bean,直到第一次訪問某個(gè)Bean 時(shí)才實(shí)例目標(biāo)Bean;而ApplicationContext 則在初始化應(yīng)用上下文時(shí)就實(shí)例化所有單實(shí)例的Bean。

了解Bean的實(shí)例化后,接下來就是Bean實(shí)例之間的關(guān)系,也就是依賴注入;
Spring IoC容器的依賴有兩層含義:Bean依賴容器容器注入Bean的依賴資源

Bean依賴容器:也就是說Bean要依賴于容器,這里的依賴是指容器負(fù)責(zé)創(chuàng)建Bean并管理Bean的生命周期,正是由于由容器來控制創(chuàng)建Bean并注入依賴,也就是控制權(quán)被反轉(zhuǎn)了,這也正是IoC名字的由來,此處的有依賴是指Bean和容器之間的依賴關(guān)系。

容器注入Bean的依賴資源:容器負(fù)責(zé)注入Bean的依賴資源,依賴資源可以是Bean、外部文件、常量數(shù)據(jù)等,在Java中都反映為對(duì)象,并且由容器負(fù)責(zé)組裝Bean之間的依賴關(guān)系,此處的依賴是指Bean之間的依賴關(guān)系,可以認(rèn)為是傳統(tǒng)類與類之間的“關(guān)聯(lián)”、“聚合”、“組合”關(guān)系。

Spring IoC容器注入依賴資源主要有以下兩種基本實(shí)現(xiàn)方式:

構(gòu)造器注入:就是容器實(shí)例化Bean時(shí)注入那些依賴,通過在在Bean定義中指定構(gòu)造器參數(shù)進(jìn)行注入依賴,包括實(shí)例工廠方法參數(shù)注入依賴,但靜態(tài)工廠方法參數(shù)不允許注入依賴;

setter注入:通過setter方法進(jìn)行注入依賴;

一、構(gòu)造器注入:
1)常量值

 
常量

2)引用


二、setter注入:
1)常量值


常量

2)引用


3)數(shù)組:

  
      
        1  
        2  
        3  
      
  

4)列表:

  
      
        1  
        2  
        3  
      
  

5)集合:

  
      
        1  
        2  
        3  
      
  

6)字典



    
    



    鍵常量值常量
    

7)Properties

另外,基于注解驅(qū)動(dòng)的Spring Ioc的原理以及Spring IoC源碼剖析相關(guān)我在在網(wǎng)上找到一些文章,大家也可以看一下。
Spring依賴注入的兩種方式xml和注解
使用注釋驅(qū)動(dòng)的Ioc功能
Spring IoC源碼剖析

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67521.html

相關(guān)文章

  • 慕課網(wǎng)_《Spring入門篇》學(xué)習(xí)總結(jié)

    摘要:入門篇學(xué)習(xí)總結(jié)時(shí)間年月日星期三說明本文部分內(nèi)容均來自慕課網(wǎng)。主要的功能是日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等等。 《Spring入門篇》學(xué)習(xí)總結(jié) 時(shí)間:2017年1月18日星期三說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:https://git...

    Ververica 評(píng)論0 收藏0
  • Spring IOC知識(shí)點(diǎn)一網(wǎng)打盡!

    摘要:使用的好處知乎的回答不用自己組裝,拿來就用。統(tǒng)一配置,便于修改。 前言 只有光頭才能變強(qiáng) 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡(jiǎn)單啦 單例模式你會(huì)幾種寫法? 工廠模式理解了沒有? 在刷Spring書籍的時(shí)候花了點(diǎn)時(shí)間去學(xué)習(xí)了單例模式和工廠模式,總的來說還是非常值得的! 本來想的是刷完《Spring 實(shí)戰(zhàn) (第4版)》和《精通Spring4.x 企業(yè)應(yīng)用開發(fā)實(shí)戰(zhàn)》...

    djfml 評(píng)論0 收藏0
  • 零基礎(chǔ)帶你看Spring源碼——IOC控制反轉(zhuǎn)

    摘要:依賴注入是向某個(gè)類或方法注入一個(gè)值,其中所用到的原理就是控制反轉(zhuǎn)。但發(fā)現(xiàn)更多時(shí)間是在調(diào)和的源碼。里面就是從中取出這個(gè),完成控制反轉(zhuǎn)的??刂品崔D(zhuǎn)的優(yōu)點(diǎn)最后來以我個(gè)人觀點(diǎn)談?wù)効刂品崔D(zhuǎn)的優(yōu)點(diǎn)吧??刂品崔D(zhuǎn)為了降低項(xiàng)目耦合,提高延伸性。 本章開始來學(xué)習(xí)下Spring的源碼,看看Spring框架最核心、最常用的功能是怎么實(shí)現(xiàn)的。網(wǎng)上介紹Spring,說源碼的文章,大多數(shù)都是生搬硬推,都是直接看來的...

    wing324 評(píng)論0 收藏0
  • Spring IOC 容器源碼分析系列文章導(dǎo)讀

    摘要:本文是容器源碼分析系列文章的第一篇文章,將會(huì)著重介紹的一些使用方法和特性,為后續(xù)的源碼分析文章做鋪墊。我們可以通過這兩個(gè)別名獲取到這個(gè)實(shí)例,比如下面的測(cè)試代碼測(cè)試結(jié)果如下本小節(jié),我們來了解一下這個(gè)特性。 1. 簡(jiǎn)介 Spring 是一個(gè)輕量級(jí)的企業(yè)級(jí)應(yīng)用開發(fā)框架,于 2004 年由 Rod Johnson 發(fā)布了 1.0 版本。經(jīng)過十幾年的迭代,現(xiàn)在的 Spring 框架已經(jīng)非常成熟了...

    NSFish 評(píng)論0 收藏0
  • 面試官:“談?wù)?em>Spring中都用到了那些設(shè)計(jì)模式?”。

    摘要:會(huì)一直完善下去,歡迎建議和指導(dǎo),同時(shí)也歡迎中用到了那些設(shè)計(jì)模式中用到了那些設(shè)計(jì)模式這兩個(gè)問題,在面試中比較常見。工廠設(shè)計(jì)模式使用工廠模式可以通過或創(chuàng)建對(duì)象。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識(shí)點(diǎn)以及面試問題,已經(jīng)開源,目前已經(jīng) 41k+ Star。會(huì)一直完善下去,歡迎建議和指導(dǎo),同時(shí)也歡迎Star: https://github.com/Snailclimb... JDK 中用到了那...

    Astrian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<