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. 糟糕的css用法 1

    现在网站追求越来越漂亮好看,越来越炫,所以css是必不可少的.可是我发现许多人使用css的方式是不对的,至少是不推荐的. 比如下面的css用法不对 (1)一个页面对应一个css文件 这种做法是我深恶痛 ...

  2. js获取当前域名、Url、相对路径和参数

    用 Javascript 可以单独获取当前域名.Url.相对路径和参数,所谓单独攻取,即域名不包括网页文件的路径和参数.参数不包括域名和网页文件路径,下面分别介绍. 一.js获取当前域名有2种方法 1 ...

  3. Oracle中rownum用法警示

    今天调试代码,发现分页查询时使用Oracle中rownum的between......and用法的bug,特此总结: 参考资料:http://blog.csdn.net/lg312200538/art ...

  4. SQL操作查漏补缺

    SQL教程地址:http://www.w3school.com.cn/sql/index.asp TOP 子句 TOP 子句用于规定要返回的记录的数目. 对于拥有数千条记录的大型表来说,TOP 子句是 ...

  5. 97.5%准确率的深度学习中文分词(字嵌入+Bi-LSTM+CRF)

    本文转载自:http://www.17bigdata.com/97-5%E5%87%86%E7%A1%AE%E7%8E%87%E7%9A%84%E6%B7%B1%E5%BA%A6%E5%AD%A6%E ...

  6. 个基于TensorFlow的简单故事生成案例:带你了解LSTM

    https://medium.com/towards-data-science/lstm-by-example-using-tensorflow-feb0c1968537 在深度学习中,循环神经网络( ...

  7. String 转化Calendar

    SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); Date dateExecute = s ...

  8. Flask学习笔记

    1.路由用"/"结尾. 比如@app.route("/about/"),可以匹配/about和/about/,而@app.route("/about& ...

  9. python网络爬虫 - 设定重试次数内反复抓取

    import urllib.request def download(url, num_retries=2): print('Downloading:', url) try: html = urlli ...

  10. asp.net 常用于客户端注册的机器信息

    项目需要:根据客户端信息去获取用户登录信息 1.根据客户端信息,并查询数据库是否有匹配.如果没有则重新插入客户端信息: 2.根据客户端的设置提交用户登录信息,用户登录成功后,查询以前是否有过配置信息, ...