欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring?IOC控制反轉(zhuǎn)原理詳解

 更新時(shí)間:2022年03月07日 15:42:40   作者:ZJH'blog  
這篇文章主要為大家詳細(xì)介紹了spring?IOC控制反轉(zhuǎn)原理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

IOC概念

  • 定義:控制反轉(zhuǎn),把對(duì)象的創(chuàng)建和調(diào)用(傳統(tǒng)方式是通過(guò)new之后直接使用對(duì)象),交給Spring進(jìn)行管理(依靠對(duì)象工廠通過(guò)注入的方式獲取對(duì)象)
  • 降低耦合度
  • 底層原理:xml解析、工廠模式、反射

參考

補(bǔ):工廠模式和單例模式區(qū)別

單例模式(懶漢式,餓漢式)都只能創(chuàng)建一個(gè)指定類(lèi)的唯一對(duì)象

工廠模式(一個(gè)接口,多態(tài)性的體現(xiàn))可以創(chuàng)建該接口的工廠下的所有類(lèi)的唯一對(duì)象

IOC接口——實(shí)現(xiàn)IOC容器

IOC容器可以有多個(gè),new幾個(gè)就有幾個(gè)IOC容器,一個(gè)容器綁定一個(gè)xml文件,一個(gè)xml中可以配置多個(gè)bean,容器可以關(guān)閉

1.BeanFactory

  • Spring的內(nèi)部接口,不建議開(kāi)發(fā)者使用
  • 懶漢式,加載配置文件的時(shí)候不創(chuàng)建對(duì)象

2.ApplicationContext

  • BeanFactory的子接口
  • 功能更強(qiáng)大,建議開(kāi)發(fā)者使用
  • 餓漢式,加載配置文件即創(chuàng)建對(duì)象
  • 由于創(chuàng)建對(duì)象會(huì)耗費(fèi)時(shí)間和資源,因此餓漢式可以把時(shí)間開(kāi)銷(xiāo)放在項(xiàng)目啟動(dòng)時(shí)

第三個(gè)是基于注解的獲取容器方式,利用反射而非解析xml配置

SpringBoot中獲取ApplicationContext的三種方式

1.@Autowired: 在任意被spring托管的類(lèi)中注入

2.ApplicationContextAware接口:實(shí)現(xiàn)這個(gè)接口可以在普通類(lèi)中獲取Spring的IOC容器

IOC操作管理Bean

xml配置bean

在bean.xml中配置了bean的屬性后,先解析xml得到IOC接口對(duì)象(IOC容器),然后通過(guò)容器來(lái)getBean,獲得對(duì)象

同時(shí),ApplicationContext也可以換成其父接口BeanFactory,結(jié)果不受影響

DI:依賴(lài)注入(注入屬性)

兩種方法

set方法+property

有參構(gòu)造+constructor

 工廠Bean和普通Bean

注解配置bean

注冊(cè)Bean

以下5個(gè)注解都可以創(chuàng)建Bean對(duì)象交給Spring的IOC容器進(jìn)行管理

  • @Component:以下4個(gè)的元注解
  • @Service
  • @Controller
  • @Repository
  • @Configuration

因?yàn)樵⒔釩omponent可以指定value=“別名”,所以以上5種注冊(cè)Bean的方式都可以起別名,一個(gè)接口多個(gè)實(shí)現(xiàn)類(lèi)Bean的情況需要起別名,否則Spring無(wú)法判斷獲取哪個(gè)Bean

使用Bean

  • @Autowired:根據(jù)類(lèi)自動(dòng)裝配
  • @Qualifier:根據(jù)別名裝配,要和@Autowired搭配使用
  • @Resource:即可根據(jù)類(lèi)也可根據(jù)別名
  • @Value:注入普通類(lèi)型屬性

兩個(gè)String實(shí)現(xiàn)Bean,起別名

Bean的配置

作用域:如何設(shè)置bean的單例or多例

scope屬性值:(常用singleton和prototype)

  • singleton:默認(rèn)值,單例對(duì)象,餓漢式
  • prototype:多實(shí)例對(duì)象,懶漢式
  • request請(qǐng)求、session會(huì)話(huà):不常用

在bean.xml中或者@Bean(scope="")中配置

生命周期:創(chuàng)建到銷(xiāo)毀

1.無(wú)參構(gòu)造

2.調(diào)用set方法解析配置

3.調(diào)用bean的初始化方法

如果有配置了初始化方法,需要配置init-method=“初始化方法的名稱(chēng)”

例如:在@Bean(initmethod=“xxx方法”)

4.獲取bean并使用

注解方法可以直接@Autowired注入bean,配置xml的方式通過(guò)

new ClassPathXmlApplicationContext(xxxx.xml)解析并獲取IOC容器之后getBean

5.bean的銷(xiāo)毀與銷(xiāo)毀時(shí)方法

springboot中的bean創(chuàng)建與銷(xiāo)毀

銷(xiāo)毀方法的配置@Bean(destroyMethod = “xxxxx”)

如果是配置在xml中,則

<bean id="  " class="   " destroy-method="   "></bean>

xml配置的Bean的關(guān)閉:關(guān)閉IOC容器即可

Bean掃描

spring中xml配置

spring和springboot中的注解配置

@ComponentScan

  • 被Component及其子注解標(biāo)注的Bean需要用ComponentScan掃描到才能使用
  • SpringBootApplication啟動(dòng)類(lèi)包括了@ComponentScan
  • @ComponentScan默認(rèn)掃描該類(lèi)包下的所有Bean
  • @ComponentScan可以自定義basePackages、includeFilters、excludeFilters

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!    

相關(guān)文章

  • 詳解JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式

    詳解JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式

    這篇文章主要介紹了詳解JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • java實(shí)現(xiàn)兩個(gè)文件的拼接

    java實(shí)現(xiàn)兩個(gè)文件的拼接

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)兩個(gè)文件的拼接,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 使用java反射將結(jié)果集封裝成為對(duì)象和對(duì)象集合操作

    使用java反射將結(jié)果集封裝成為對(duì)象和對(duì)象集合操作

    這篇文章主要介紹了使用java反射將結(jié)果集封裝成為對(duì)象和對(duì)象集合操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • 華為鴻蒙系統(tǒng)應(yīng)用開(kāi)發(fā)工具 DevEco Studio的安裝和使用圖文教程

    華為鴻蒙系統(tǒng)應(yīng)用開(kāi)發(fā)工具 DevEco Studio的安裝和使用圖文教程

    HUAWEI DevEco Studio 是華為消費(fèi)者業(yè)務(wù)為開(kāi)發(fā)者提供的集成開(kāi)發(fā)環(huán)境(IDE),旨在幫助開(kāi)發(fā)者快捷、方便、高效地使用華為EMUI開(kāi)放能力。這篇文章主要介紹了華為鴻蒙系統(tǒng)應(yīng)用開(kāi)發(fā)工具 DevEco Studio的安裝和使用圖文教程,需要的朋友可以參考下
    2021-04-04
  • Java 內(nèi)存模型(JVM)

    Java 內(nèi)存模型(JVM)

    本文公國(guó)講解Java 內(nèi)存模型來(lái)看看解決可見(jiàn)性、有序性問(wèn)題的 Java 內(nèi)存模型(JMM),今天通過(guò)本文給大家介紹Java 內(nèi)存模型(JVM)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-08-08
  • Java構(gòu)建樹(shù)形菜單的實(shí)例代碼(支持多級(jí)菜單)

    Java構(gòu)建樹(shù)形菜單的實(shí)例代碼(支持多級(jí)菜單)

    這篇文章主要介紹了Java構(gòu)建樹(shù)形菜單的實(shí)例代碼(支持多級(jí)菜單),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-09-09
  • 詳解Java內(nèi)部類(lèi)與對(duì)象的打印概念和流程

    詳解Java內(nèi)部類(lèi)與對(duì)象的打印概念和流程

    在 Java 中,可以將一個(gè)類(lèi)定義在另一個(gè)類(lèi)里面或者一個(gè)方法里面,這樣的類(lèi)稱(chēng)為內(nèi)部類(lèi)。廣泛意義上的內(nèi)部類(lèi)一般來(lái)說(shuō)包括這四種:成員內(nèi)部類(lèi)、局部?jī)?nèi)部類(lèi)、匿名內(nèi)部類(lèi)和靜態(tài)內(nèi)部類(lèi)
    2021-10-10
  • Java內(nèi)存溢出的幾個(gè)區(qū)域總結(jié)(注意避坑!)

    Java內(nèi)存溢出的幾個(gè)區(qū)域總結(jié)(注意避坑!)

    內(nèi)存溢出是指應(yīng)用系統(tǒng)中存在無(wú)法回收的內(nèi)存或使用的內(nèi)存過(guò)多,最終使得程序運(yùn)行要用到的內(nèi)存大于虛擬機(jī)能提供的最大內(nèi)存,下面這篇文章主要給大家介紹了關(guān)于Java內(nèi)存溢出的幾個(gè)區(qū)域,總結(jié)出來(lái)給大家提醒注意避坑,需要的朋友可以參考下
    2022-11-11
  • dubbo服務(wù)引用之創(chuàng)建Invoker流程詳解

    dubbo服務(wù)引用之創(chuàng)建Invoker流程詳解

    這篇文章主要為大家介紹了dubbo服務(wù)引用二之創(chuàng)建Invoker流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Java 發(fā)送http請(qǐng)求上傳文件功能實(shí)例

    Java 發(fā)送http請(qǐng)求上傳文件功能實(shí)例

    本文通過(guò)實(shí)例代碼給大家介紹了Java 發(fā)送http請(qǐng)求上傳文件功能,需要的朋友參考下吧
    2017-06-06

最新評(píng)論