溫馨提示:
以下異常僅在Spring3.0.3版本中遇到,其他版本可能也會遇到,讀者可作參考。不保證會順利通過。
近期在學習Spring3的一些新特性,一般在項目開發中為了方便期間,都是借助myeclipse工具來添加ssh支持,很少手動添jar包。這里想自虐一下,體驗一下jar包沖突或找不到類的那種感覺,在此也將在Spring3.0中AOP開發過程中遇到的異常什么的記錄出來,可以方便更多人,快速定位錯誤。
第一個異常
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
有過開發經驗的一眼就可以看出,這是缺少commons-logging.jar包,因為spring中使用它來記錄日志,而spring3.0.3這個版本中并沒有該jar,自行到apache網站下載添加該jar即可
第二個異常
在使用AOP的注解時需要用到aopalliance.jar 、aspectjrt.jar 、aspectjweaver.jar,而此三個jar包并未在spring3.0.3的發布中提供需要開發者自行添加
第三個異常
org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces
從異常信息可以看出是cglib的問題,而我們去檢查項目,卻發現項目中并未cglib的jar,那么你可能想到的是缺少cglib這個jar包,沒錯,你的思路是正確的,你具有做javaee開發的思維,添加cglib-2.2.jar即可
第四個異常,這也是開發中每個人都會遇到的一個異常,堪稱ssh開發中的經典,如果你是一位技術主管,那么你可以同過此異常去考查一個新人,一看便知,他有沒有javaee開發經驗。呵呵,廢話這么多了,不知道你有沒有猜到是什么了。還是我來告訴你吧,那就是經典的asm.jar包沖突,你的答案正確嗎?不正確,沒關系,你只要記下如何解決就可以了,這個異常保證你在工作中遇到或在面試中問到,那么它的重要性可想而知了。
下面分環境來介紹該jar包沖突的解決方案。
在spring3.0以下的環境中(適應于ssh),若出現該jar包沖突,你需要刪除帶版本號的那個asm.jar,而保留不帶版本號的那個asm.jar即可
在spring3.0的環境中,大家仔細檢查的話發現spring也帶了一個名為org.springframework.asm-3.0.3.RELEASE.jar的jar包,而在開發中僅僅使用這個jar包還是不夠的,你還需要額外的去添加asm.jar,那么這個asm.jar到底是那個版本了?用大腿想想?記得胡叔叔上臺的時候提過與時俱進這個詞,呵呵,人家是說政治的,我這是說開發的,既然spring是3.0的版本,那么asm.jar這個jar包版本肯定也是3.0以上版本啦,要與時俱進嘛。下載地址http://forge.ow2.org/projects/asm/ 我們會看到一個3.3的版本。
可能見到的異常信息
java.lang.NoClassDefFoundError: org/objectweb/asm/Type
org.objectweb.asm.ClassVisitor.visit
asm3.3.jar,你值得擁有!