spring_error——記錄使用spring時的一些error

程序计算机人發表於2024-03-17

  直接進入正題。時間是2024-03-17

  1.FactoryBean threw exception on object creation; nested exception is java.lang.NoClassDefFoundError:

    參考了這個連結:怎麼解決java.lang.NoClassDefFoundError錯誤-CSDN部落格 一句話概括就是NoClassDefFoundError有很多原因,這裡只寫我遇到的情況。

    這是我的專案情況(跟著別人做的)

    

    出現了報錯,我就彈去了他說的測試類bug程式碼處,接而檢查了

UserDao userDao = (UserDao) applicationContext.getBean("userDaoProxy");
    這一句程式碼,然後去對應的xml(bean的xml配置檔案),發現確實啥也沒有寫錯,id沒有誤寫,path也是直接右鍵copy path的。
    仔細看報錯的圖片(看那些比較獨特的,看看得懂的),我發現了一個和spring有關的。在這句FactoryBean threw exception on object creation; nested exception is java.lang.NoClassDefFoundError:後面接上了一個jar包 spring-core,開啟專案的pom.xml檔案,仔細觀察各種依賴,發現spring的基礎包中spring-core包版本明顯高於其他3個基礎包,我就將其他的包的版本都提高了(應該是一樣就可以了),問題解決。
        

   

  2.Exception in thread "main" java.lang.ClassCastException: class com.itheima.cglib.UserDao cannot be cast to class com.itheima.jdk.UserDao (com.itheima.cglib.UserDao and com.itheima.jdk.UserDao are in unnamed module of loader 'app')

    直接看,可以看出來說是.cglib.UserDao不能強轉給.jdk.UserDao。問題就來了,為什麼不能強轉?本來可以強轉的但是這裡的型別變了所以不能強轉了,為什麼型別變了?我們在用註解的方式來使用Aspectj的時候可能壓根就沒有給一個bean給它。

    所以透過Aspectj的知識,去xml檔案裡面裡找,會發現有可能找不到id為userdo的bean。因為根本沒有,所以編譯器不知道為什麼把另一個包的bean拿過來用了。加上去就可以了。

相關文章