亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

IOC概念

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

參考

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

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

工廠模式(一個(gè)接口,多態(tài)性的體現(xiàn))可以創(chuàng)建該接口的工廠下的所有類的唯一對(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)部接口,不建議開發(fā)者使用
  • 懶漢式,加載配置文件的時(shí)候不創(chuàng)建對(duì)象

2.ApplicationContext

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

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

SpringBoot中獲取ApplicationContext的三種方式

1.@Autowired: 在任意被spring托管的類中注入

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

IOC操作管理Bean

xml配置bean

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

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

DI:依賴注入(注入屬性)

兩種方法

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)類Bean的情況需要起別名,否則Spring無法判斷獲取哪個(gè)Bean

使用Bean

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

兩個(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ì)話:不常用

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

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

1.無參構(gòu)造

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

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

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

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

4.獲取bean并使用

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

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

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

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

銷毀方法的配置@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)類包括了@ComponentScan
  • @ComponentScan默認(rèn)掃描該類包下的所有Bean
  • @ComponentScan可以自定義basePackages、includeFilters、excludeFilters

總結(jié)

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

相關(guān)文章

最新評(píng)論