您的位置:首页 > 编程语言 > Java开发

关于SSH整合使用MyEclipse自动导入包导致包冲突问题(cglib asm)

2012-08-05 20:40 393 查看
本文转自:点击打开链接

MyEclipse的Add xxxx Capabilities 功能初学时感觉十分便捷,帮助完成了许多功能,很方便的可以搭建SSH平台。

久而久之发现问题多多,最近启动Tomcat服务器后经常出现奇怪的异常,如下:

Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.


百度后发现是由于包冲突导致的,在lib目录下删除一下包就可解决问题:

org.springframework.asm-3.0.5.RELEASE.jar
cglib-2.2.jar


而且在MyEclipse此功能中,似乎无法某些包剔除,实在是令人懊恼,着实不人性化,还是自己导入需要的包来的实在。

百度之后,发现这两个包得用处如下:

http://nopainnogain.iteye.com/blog/761630

http://www.blogjava.net/ktoo/archive/2007/08/19/137970.html

(2)cglib-asm.jar:

CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库,必须使用的jar包

在百度知道又发现以下回复:

http://zhidao.baidu.com/question/138967980.html

cglib用来继承类或实现接口以产生对象。

源自cglib官网http://cglib.sourceforge.net/的summary。

hibernate用到了注解技术,它是从元数据如何在早期java版本中使用属性文件的原理逐渐发展为今日的注解。

处理注解的三种方式:生成器、字节码转换、运行时反射。

字节码转换:注解处理器对带有注解的类字节码文件进行解析,对其做一些适当的修改,再重新编译并生成新的对象,也能生成其他类型文件(如xml)。字节码转换器在编译期(离线状态)、装载期都能运行,还能在运行时动态转换,且在字节码文件或runtime这样的保持策略下也可运行。

利用cglib产生新对象会提高字节码转换的效率,二者有一定的依存关系

百度文库:

http://wenku.baidu.com/view/e19b344c2e3f5727a5e962a8.html

asm既可以分析已有的的class文件,也可以修改已有的类,增强其功能,亦可以直接生成class文件。

asm现在作为主流的aop工具。

百度百科中发现了较为标准的答案:

http://baike.baidu.com/view/1254036.htm

是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO字节码的动态生成。

 CGLIB是一个强大的高性能的代码生成包。它广泛的被许多AOP的框架使用,例如Spring AOP和dynaop,为他们提供方法的interception(拦截)。最流行的OR
Mapping工具hibernate也使用CGLIB来代理单端single-ended(多对一和一对一)关联(对集合的延迟抓取,是采用其他机制实现的)。EasyMock和jMock是通过使用模仿(moke)对象来测试java代码的包。它们都通过使用CGLIB来为那些没有接口的类创建模仿(moke)对象。

  CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。除了CGLIB包,脚本语言例如Groovy和BeanShell,也是使用ASM来生成java的字节码。当不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。



看来似乎是核心包,而且被Spring和Hibernate都是用,做为动态代理控制要访问的目标的一种途径,cglib的底层通过字节码处理框架asm来转换为新的类,类似的应用还有Groovy。

这里还有一些Spring中asm的应用实例,看来有空可以研究下Spring源码:

http://joinhack.iteye.com/blog/796552






PS:

此外,之前还以为导入不需要的包:

struts2-convention-plugin-2.2.1.jar


打开了根据约定配置Action,导致页面无法访问。

还是决定研究一下SSH中每个包的作用,以后手工导入。



PS2:

又发现一个包问题

org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [applicationContext.xml];nested exception is java.lang.NoSuchMethodError:


解决方法为在lib目录下删除spring-beans-2.5.6.jar,spring-context-2.5.6.jar,spring-web-2.5.6.jar,spring-core-2.5.6.jar三个包方可解决。

再一次验证了,包还是自己一个个导入好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐