參考:在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...