2010-10-29 

温馨提示:
        以下异常仅在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 notavailable. 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,你值得拥有!

***************************************
报Cannot proxy target class because CGLIB2 is not available

问题原因
代理为控制要访问的目标对象提供了一种途径。当访问对象时,它引入了一个间接的层。JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。JDK的动态代理用起来非常简单,但它有一个限制,就是使用动态代理的对象必须实现一个或多个接口。
 
解决办法
方案一 使实际的类实现某个接口
方案二 使用CGLIB包
cglib是一个开源项,一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO字节码的动态生成。

Spring3.0.3使用之异常解决的更多相关文章

  1. 无法解析指定对象的 TargetProperty (UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)“的异常解决

    最近在写动画的时候做一个倒计时的效果,就是数字从大到小的一个动画,但是当我设置要new PropertyPath("XXXXXXX")的时候却报了标题的异常,各种报错.百度了好久也 ...

  2. bug -- android 7.0 popwindow显示位置异常情况解决

    android 7.0 popwindow显示位置异常,在android7.1官方进行解决了,但是还是要多7.0的bug进行解决,我的解决方案里面通过重写popwindow进行适配: import a ...

  3. Spring3.0 与 MyBatis框架 整合小实例

    本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...

  4. Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合例子(附完整的请假流程例子,jbpm基础,常见问题解决)

    Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子(附完整的请假流程例子). 1.jbpm4.4 测试环境搭建 2.Jbpm4.4+hibernat ...

  5. Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子

    转自:http://www.blogjava.net/wangxinsh55/archive/2011/07/24/354925.html   Jbpm4.4+hibernate3.5.4+sprin ...

  6. [异常解决] How to build a gcc toolchain for nRF51 on linux (very detailed!!!)

    1.Install gcc-arm-none-eabi https://devzone.nordicsemi.com/tutorials/7/This link shows that developm ...

  7. 模块化之Spring3.0 web fragment和gradle构建项目

      1.背景 模块化开发很久以前就开始普及的概念.但是到了企业实际情况中,真正把模块化作为系统架构的核心的不多.或者说对模块化有这个意识,但是具体到底该如何实现,有些模糊,同时也许因为项目紧.任务中. ...

  8. spring3.0使用annotation完全代替XML(三)

    很久之前写过两篇博客: spring3.0使用annotation完全代替XML spring3.0使用annotation完全代替XML(续) 用java config来代替XML,当时还遗留下一些 ...

  9. spring3.0使用annotation完全代替XML

    @Service与@Component有什么不同?那天被问到这个问题,一时之间却想不起来,就利用这篇文章来纪录spring3.0中常用的annotation. 从spring2.5开始,annotat ...

随机推荐

  1. 重启Windows的PowerShell

    这么简单的一个命令都单独写一篇blog, 是不是太无耻了? 好吧, 谁让咱不会呢. 学会了就来一篇. 呵呵. Restart-Computer   来源 ================ http:/ ...

  2. 领扣-120 三角形最小路径和 Triangle MD

    三角形最小路径和 Triangle 数组 动态规划 问题 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [2], [3,4], [6,5,7], ...

  3. js中各种跨域问题实战小结

    什么是跨域?为什么要实现跨域呢?   这是因为JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.也就是说只能访问同一个域中的资源.我觉得这就有必要了解下javascript中的同源 ...

  4. C#,深入浅出全接触(一)

    一.什么是 C#? C# 是由Microsoft开发的一种新型编程语言,由于它是从C和C++ 中派生出来的,因此具有C++的功能.同时,由于是Microsoft公司的产品,它又同 VB一样简单.对于w ...

  5. java.sql.SQLException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值

    问题来源:我在执行sql生成json并存入数据库是报的错. 原因:存json的字段我定义其类型为varchar2. 分析:这个异常是指,用户向数据库执行插入数据操作时,某条数据的某个字段值过长,如果是 ...

  6. JSP中利用JSTL标签对日期格式化

    数据库:Mysql 开发语言:JAVA 页面类型:JSP 对Mysql中的日期类型格式化,在JSP中,如何办呢,很多人说在JAVA后台去日期格式化,无奈了,于是找到了比较靠谱的答案 需要先引入JSTL ...

  7. [React] Asynchronously Load webpack Bundles through Code-splitting and React Suspense

    One approach to building high performance applications with webpack is to take advantage of code-spl ...

  8. JavaScript判断变量是否为数组的方法(Array)

    废话不多说直接上一个代码: 1.这里是通用的检测方法 /* * 判断是否是数组 */ function isArray(obj){ return Object.prototype.toString.c ...

  9. WinForm程序开发

    WinForm程序开发------------------------------主要页面----------------------------------BaseForm.cs    基类,用于派 ...

  10. Spring MVC中Controller如何将数据返回给页面

    要实现Controller返回数据给页面,Spring MVC 提供了以下几种途径: ModelAndView:将视图和数据封装成ModelAndView对象,作为方法的返回值,数据最终会存到Http ...