国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 詳解Spring Bean的循環(huán)依賴(lài)解決方案

詳解Spring Bean的循環(huán)依賴(lài)解決方案

2021-03-28 13:48盲枸 Java教程

這篇文章主要介紹了詳解Spring Bean的循環(huán)依賴(lài)解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

如果使用構(gòu)造函數(shù)注入,則可能會(huì)創(chuàng)建一個(gè)無(wú)法解析的循環(huán)依賴(lài)場(chǎng)景。

什么是循環(huán)依賴(lài)

循環(huán)依賴(lài)其實(shí)就是循環(huán)引用,也就是兩個(gè)或則兩個(gè)以上的bean互相持有對(duì)方,最終形成閉環(huán)。比如A依賴(lài)于B,B依賴(lài)于C,C又依賴(lài)于A。如下圖:

詳解Spring Bean的循環(huán)依賴(lài)解決方案

注意,這里不是函數(shù)的循環(huán)調(diào)用,是對(duì)象的相互依賴(lài)關(guān)系。循環(huán)調(diào)用其實(shí)就是一個(gè)死循環(huán),除非有終結(jié)條件。

Spring中循環(huán)依賴(lài)場(chǎng)景有:

(1)構(gòu)造器的循環(huán)依賴(lài)
(2)field屬性的循環(huán)依賴(lài)。

怎么檢測(cè)是否存在循環(huán)依賴(lài)

檢測(cè)循環(huán)依賴(lài)相對(duì)比較容易,Bean在創(chuàng)建的時(shí)候可以給該Bean打標(biāo),如果遞歸調(diào)用回來(lái)發(fā)現(xiàn)正在創(chuàng)建中的話(huà),即說(shuō)明了循環(huán)依賴(lài)了。

下面是我所遇到的情況,代碼結(jié)構(gòu)如下:

SpringSecurity 配置類(lèi):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
  private final UserDetailsService userDetailsService;
 
  /**
   * 通過(guò)配置類(lèi)構(gòu)造函數(shù)注入 UserDetailsService
   */
  @Autowired
  public BrowserSecurityConfig(UserDetailsService userDetailsService) {
    this.userDetailsService = userDetailsService;
  }
 
  /**
   * 在配置類(lèi)中聲明 加密編碼器
   */
  @Bean
  public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
  }
 
  ... ...
}

UserDetailsService 類(lèi):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Component
public class MyUserDetailService implements UserDetailsService {
  private final PasswordEncoder passwordEncoder;
 
  private Logger logger = LoggerFactory.getLogger(getClass());
 
  /**
   * 通過(guò)構(gòu)造函數(shù)注入 PasswordEncoder
   */
  @Autowired
  public MyUserDetailService(PasswordEncoder passwordEncoder) {
    this.passwordEncoder = passwordEncoder;
  }
  ... ...
}

運(yùn)行之后,Spring拋出了如下錯(cuò)誤信息:

Description:

The dependencies of some of the beans in the application context form a cycle:

┌─────┐
|  browserSecurityConfig defined in file [D:\CODE\Java\IdeaProjects\mango-security\mango-security-browser\target\classes\stu\mango\security\browser\BrowserSecurityConfig.class]
↑     ↓
|  myUserDetailService defined in file [D:\CODE\Java\IdeaProjects\mango-security\mango-security-browser\target\classes\stu\mango\security\browser\MyUserDetailService.class]
└─────┘

該例中,BrowserSecurityConfig 通過(guò)構(gòu)造函數(shù)注入 UserDetailsService實(shí)例,而 UserDetailsService由通過(guò)構(gòu)造函數(shù)注入在BrowserSecurityConfig 中聲明的PasswordEncoder。

總結(jié)來(lái)說(shuō),Spring Bean的循環(huán)依賴(lài)是指,類(lèi)A需要通過(guò)構(gòu)造函數(shù)注入的類(lèi)B的實(shí)例(或者B中聲明的Bean),而類(lèi)B需要通過(guò)構(gòu)造函數(shù)注入的類(lèi)A的實(shí)例(或者A中聲明的Bean)。如果將類(lèi)A和類(lèi)B的bean配置為相互注入,則Spring IoC容器會(huì)在運(yùn)行時(shí)檢測(cè)到此循環(huán)引用,并引發(fā)一個(gè)BeanCurrentlyInCreationException。與典型情況(沒(méi)有循環(huán)依賴(lài))不同,bean A和bean B之間的循環(huán)依賴(lài)關(guān)系迫使其中一個(gè)bean在被完全初始化之前被注入到另一個(gè)bean中(這是一個(gè)典型的“先有雞還是先有蛋”場(chǎng)景)。

解決方案

簡(jiǎn)明扼要的說(shuō),就是——不使用基于構(gòu)造函數(shù)的依賴(lài)注入。可通過(guò)下面方式解決。

在字段上使用@Autowired注解,讓Spring決定在合適的時(shí)機(jī)注入。【推薦】

基于setter方法的依賴(lài)注射取代基于構(gòu)造函數(shù)的依賴(lài)注入來(lái)解決循環(huán)依賴(lài)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://www.jianshu.com/p/d935341694d2

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美黑人性暴力猛交喷水 | 四虎小视频 | 亚洲国产精品一区二区第一页 | 日本精品久久 | 欧美日韩国产影院 | 九九热视频在线 | 国产片在线免费观看 | 久久久久久九九 | 中文字幕在线观看第一页 | 一级大片av| 欧美自拍一区 | 高清18麻豆 | 蜜臀久久精品99国产精品日本 | 亚洲国产精品久久久久 | 亚洲精品视频一区二区三区 | 亚洲国产精品99久久久久久久久 | 在线日韩一区二区 | 奇米一区二区三区 | 中文字幕一区二区三区不卡 | 一区二区三区四区视频 | 成人性做爰av片免费看 | 欧洲精品视频在线观看 | 这里只有精品视频 | 久久成人免费 | 精品久久久久久久久久久下田 | 中文字幕一区二区在线观看 | 久草电影网 | 国产一区二区三区在线视频 | 91中文在线观看 | 久久精品不卡 | 日韩理伦片在线观看视频播放 | 久久婷婷色 | 亚洲视频一区二区三区 | 国产精品美女久久久久久免费 | 最新国产精品 | 成人h动漫精品一区二区樱花 | 成人在线精品 | 欧美欧美欧美 | 久久亚洲国产精品 | 97视频免费在线观看 | 91新视频 |