AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

SpringBoot這些異常你知道原因嗎?你遇過到幾個?

來源: 責編: 時間:2024-09-10 09:51:01 143觀看
導讀環境:SpringBoot3.2.51. 簡介在篇文章,我們將詳細討論 BeanCreationException 異常。這是 BeanFactory 在創建定義的 Bean 時遇到問題時拋出的一種非常常見的異常。本文將探討導致這種異常的最常見原因以及解決方案。2.

環境:SpringBoot3.2.5IYG28資訊網——每日最新資訊28at.com

1. 簡介

在篇文章,我們將詳細討論 BeanCreationException 異常。這是 BeanFactory 在創建定義的 Bean 時遇到問題時拋出的一種非常常見的異常。本文將探討導致這種異常的最常見原因以及解決方案。IYG28資訊網——每日最新資訊28at.com

2. 異常分類

2.1 NoSuchBeanDefinitionException

該異常的原因是 Spring 嘗試注入一個容器中不存在的 Bean,如下示例:IYG28資訊網——每日最新資訊28at.com

public class UserDAO {}@Servicepublic class UserService {  @Resource  private UserDAO dao ;}

這里UserDAO類上并沒有添加任何注解,當啟動容器時,拋出如下錯誤IYG28資訊網——每日最新資訊28at.com

圖片圖片IYG28資訊網——每日最新資訊28at.com

遇到該異常,那你就要檢查UserDAO類上是否添加了@Component, @Repository, @Service, @Controller, 這些注解(或者配置類中使用@Bean)。還有一點是,當前這個類所在的包在當前掃描的范圍內。IYG28資訊網——每日最新資訊28at.com

2.2 NoUniqueBeanDefinitionException

該異常的原因是 Spring 在注入某個抽象類(接口)時,發現容器中存在多個,如下示例:IYG28資訊網——每日最新資訊28at.com

public interface DAO {}@Componentpublic class CommonDAO implements DAO {}@Componentpublic class PersonDAO implements DAO {}@Servicepublic class UserService {  @Resource  private DAO dao ;}

啟動容器后,拋出如下錯誤IYG28資訊網——每日最新資訊28at.com

圖片圖片IYG28資訊網——每日最新資訊28at.com

解決辦法就是指定名稱,上面使用的@Resource可以指定name屬性IYG28資訊網——每日最新資訊28at.com

@Servicepublic class UserService {  @Resource(name = "personDAO")  private DAO dao ;}

如果你使用的@Autowired,那么你可以使用@QualifierIYG28資訊網——每日最新資訊28at.com

2.3 BeanInstantiationException

出現該異常的原因是在創建實例對象時,如下示例:IYG28資訊網——每日最新資訊28at.com

創建對象拋出了異常

@Controllerpublic class UserController {  public UserController() {    // TODO    throw new RuntimeException("異常了") ;  }}

在構造函數中,執行相關的操作時,拋出了異常,錯誤信息如下:IYG28資訊網——每日最新資訊28at.com

圖片圖片IYG28資訊網——每日最新資訊28at.com

抽象類定義為BeanIYG28資訊網——每日最新資訊28at.com

@Controllerpublic abstract class UserController {  public UserController() {  }}

拋出錯誤如下:IYG28資訊網——每日最新資訊28at.com

圖片圖片IYG28資訊網——每日最新資訊28at.com

根據異常信息提示,已經告訴你是否是抽象類。IYG28資訊網——每日最新資訊28at.com

2.4 NoSuchBeanDefinitionException

如果一個 Bean 沒有默認構造函數(無參的),而是定義了有參的構造函數,那么如果容器中不存在參數類型的bean,那么會拋出該異常,如下示例:IYG28資訊網——每日最新資訊28at.com

@Componentpublic class User {  public User(String name) {    System.out.println(name) ;  }}

拋出異常IYG28資訊網——每日最新資訊28at.com

圖片圖片IYG28資訊網——每日最新資訊28at.com

檢查容器中是否有一個String類型的Bean對象。IYG28資訊網——每日最新資訊28at.com

2.5 NotWritablePropertyException

該異常出現的概率非常小,因為我們現在都是基于注解的方式去配置bean,很少使用xml方式,除了xml方式為,我們還可以通過注冊BeanDefinition方式來來注冊Bean,接下來我們通過注冊BeanDefinition方式來設置bean的相關屬性,如下示例:IYG28資訊網——每日最新資訊28at.com

public class UserService {  private DAO dao ;}

該類并沒有對dao屬性定義setter方法。接下來,通過如下方式注冊上面的Bean對象:IYG28資訊網——每日最新資訊28at.com

ConfigurableApplicationContext context = ...context.registerBean("userService", UserService.class, bd -> {  bd.getPropertyValues().add("dao", xxx) ;}) ;

通過BeanDefinition方式注冊bean,并添加屬性,運行程序后拋出如下錯誤:IYG28資訊網——每日最新資訊28at.com

圖片圖片IYG28資訊網——每日最新資訊28at.com

2.6 BeanCurrentlyInCreationException

該異常通常發生在使用構造器注入時,例如循環依賴的情況下,如下示例:IYG28資訊網——每日最新資訊28at.com

@Componentpublic class A {  public A(B b) {}}@Componentpublic class B {  public B(A a) {  }}

拋出如下錯誤IYG28資訊網——每日最新資訊28at.com

圖片IYG28資訊網——每日最新資訊28at.com

異常信息中已經描述了,是否是循環依賴,解決改異常,可以在任意一方使用@Lazy注解即可,如下示例:IYG28資訊網——每日最新資訊28at.com

public class A {  public A(@Lazy B b) {}}

這里只需要在任何一方的參數上添加@Lazy注解即可解決該循環依賴問題。IYG28資訊網——每日最新資訊28at.com

2.7 BeanDefinitionOverrideException

當容器中出現beanName相同的情況(不允許覆蓋),則拋出該異常,如下示例:IYG28資訊網——每日最新資訊28at.com

@Component("xxxooo")public class A {}@Component("xxxooo")public class B {}

這里定義了2個beanName都為xxxooo的對象,默認情況下,springboot是不允許覆蓋的,如下屬性配置:IYG28資訊網——每日最新資訊28at.com

spring:  main:    allow-bean-definition-overriding: false

在這種情況下,啟動時將拋出如下錯誤:IYG28資訊網——每日最新資訊28at.com

圖片圖片IYG28資訊網——每日最新資訊28at.com

當設置為true,以后,容器中將存在的將是xxxooo=com.pack.B。后面的會覆蓋前面定義的bean。IYG28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-112783-0.htmlSpringBoot這些異常你知道原因嗎?你遇過到幾個?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Java8 中一個極其強悍的新接口,很多人沒用過

下一篇: 這應該是全網最詳細的Vue3.5版本解讀

標簽:
  • 熱門焦點
  • 6月iOS設備好評榜:第一蟬聯榜首近一年

    作為安兔兔各種榜單里變化最小的那個,2023年6月的iOS好評榜和上個月相比沒有任何排名上的變化,僅僅是部分設備好評率的下降,長年累月的用戶評價和逐漸退出市場的老款機器讓這
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 谷歌KDD'23工作:如何提升推薦系統Ranking模型訓練穩定性

    谷歌在KDD 2023發表了一篇工作,探索了推薦系統ranking模型的訓練穩定性問題,分析了造成訓練穩定性存在問題的潛在原因,以及現有的一些提升模型穩定性方法的不足,并提出了一種新
  • 為什么你不應該使用Div作為可點擊元素

    按鈕是為任何網絡應用程序提供交互性的最常見方式。但我們經常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過這樣做,我們錯過了許多內置瀏覽器的功能。
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 阿里大調整

    來源:產品劉有媒體報道稱,近期淘寶天貓集團啟動了近年來最大的人力制度改革,涉及員工績效、層級體系等多個核心事項,目前已形成一個初步的“征求意見版”:1、取消P序列
  • 消息稱小米汽車開始篩選交付中心:需至少120個車位

    IT之家 7 月 7 日消息,日前,有微博簡介為“汽車行業從業者、長三角一體化擁護者”的微博用戶 @長三角行健者 發文表示,據經銷商集團反饋,小米汽車目前
  • 郭明錤稱華為和江淮汽車合作開發問界MPV,定價100萬左右、計劃明年量產

    8 月 1 日消息,郭明錤今天在 Medium 平臺發布博文,稱華為正在和江淮汽車合作,開發售價在 100 萬元的問界 MPV,預計在 2024 年第 2 季度量產,銷量目標為
  • 三星折疊屏手機去年銷售近1000萬臺 今年目標定為1500萬

    7月29日消息,三星率先發力可折疊手機市場,在全球市場已經取得了非常亮眼的成績,接下來會進一步鞏固和擴大這一優勢。三星在推出Galaxy Z Flip5和Galax
Top