SpringBoot的Bean之基本定義與使用

2021-10-01 22:01:32 字數 2522 閱讀 6731

參考:在spring中,有兩個非常有名的特性,依賴注入(di)與切面(aop),其中依賴注入其主要的作用,可以說就是維護spring容器建立的bean之間的依賴關係,簡單來說就是乙個bean(假定名為a)持有另乙個bean(假定名為b)的引用作為成員變數b,則由spring容器自動將b賦值給a的成員變數b

在springboot的大環境下,基本上不再使用以前的xml配置,所以本篇博文也不再介紹以往spring中,通過xml來宣告bean的使用方式

這種也是我們最常見的使用姿勢,一般就是在類上新增@component,@service等註解(@controller表示提供http介面的bean,@configuration表示配置類bean)

新增上這種註解的類,會被spring容器掃瞄載入,自動生成單例的bean,乙個典型的例項如下

@component

public

class

anodemobean

}

如果在實際測試時,發現無法獲取上面的bean,就需要注意下bean的包路徑,是否在被你程式的掃瞄路徑包含

這種方式,主要是結合configuration來定義bean,首先是宣告乙個配置類,然後再配置類中,通過返回bean物件的方法形式來宣告bean,一般使用姿勢如下

@data

public

class

configdemobean

}@configuration

public

class

beanloadconfig

}

需要說明的一點是beanloadconfig類本身也被spring容器看為乙個bean

factorybean本質上也是乙個bean,但是可以通過他來生成你期待的bean,在實際的業務場景中可能使用場景不多,但是在抽象的框架層面應用很廣,乙個簡單的使用姿勢如

public

class

facdemobean

}public

class

demofactorybean

implements

factorybean

<

facdemobean

>

@override

public

class

<

?>

getobjecttype()

@override

public

boolean

issingleton()

}@configuration

public

class

beanloadconfig

@bean

public

facdemobean

facdemobean

(demofactorybean demofactorybean)

throws

exception

}

前面介紹了如何建立bean,建立完之後,接著就是使用了,下面介紹最基本的幾種使用方式

將註解@autowired或者@resource新增到成員變數上,即表示這個成員變數會由spring容器注入對應的bean物件

@autowired

private

configdemobean configdemobean;

由spring容器依賴注入的方式,從**上看,是不會找到有什麼地方主動的塞入了這個值,但是使用處卻可以直接使用,因此需要注意有可能會出現npe

和前面其實也差不多,只不過註解放在了setter方法上

private

facdemobean facdemobean;

@autowired

private

void

setfacdemobean

(facdemobean facdemobean)

顧名思義,就是在構造方法中傳入bean物件來初始化

public

class

democontroller

}

這種方式的好處是可以避免潛在的npe問題(後面將有博文專門提及),而且針對bean不存在的情況,系統會丟擲異常,提早知道問題

提供的jar包給第三方使用,如何保證其他人能順利載入jar包中的bean?

bean初始化的先後順序是怎樣的?

可以手動註冊乙個bean麼,改怎麼做?

beanfactory與factorybean的區別是啥,各自的典型應用場景又是什麼?

重名的bean是否可以解決?

Springboot中bean的使用

通常定義bean的方式有三種,註解 xml檔案中定義等 但是在採用註解形式定義bean的時候,如果我們沒有為bean指定名字,那麼spring本身也會為bean指定乙個預設的名字,名字命名規則如下 1,如果類的前兩個字母都是大寫的話,那麼bean的名稱就是類的名稱。比如類的名稱是bean,那麼bea...

springboot 獲取普通Bean

有的時候需要在spring boo獲取普通bean,用來做測試或者其他的 我們寫乙個util 來獲取 package smaug.util.context import org.springframework.beans.bean ception import org.springframework...

Spring Boot 動態建立Bean

1 通過註解 import匯入方式建立 a 新建myimportbeandefinitionregistrar註冊中心 import org.springframework.beans.factory.support.beandefinitionregistry import org.springf...