`
darrendu
  • 浏览: 196931 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

在Spring中发现java.lang.ClassCastException: $Proxy1问题解

阅读更多
写道
碰到这样的错误提示信息一般是spring中AOP代理配置出现问题,在spring中代理的配置基本上有这么两种一种是基于JDK,而另外一种是CGLIB的代理。

基于JDK的代理是面向接口的,所有使用 Proxy 的对象都必须定义一个接口,而且用这些对象的代码也必须是对接口编程的,Proxy 生成的对象是接口一致的而不是对象一致的。Proxy 毕竟是通过反射实现的,必须在效率上付出代价:有实验数据表明,调用反射比一般的函数开销至少要大 10 倍。而且,从程序实现上可以看出,对 proxy class 的所有方法调用都要通过使用反射的 invoke 方法。因此,对于性能关键的应用,使用 proxy class 是需要精心考虑的,以避免反射成为整个应用的瓶颈。

CGLib代理同jdk代理采用不同的方式,它是采用修改java类文件而得到的。利用了CGLIB调用ASM库,ASM 能够通过改造既有类,直接生成需要的代码。增强的代码是硬编码在新生成的类文件内部的,没有反射带来性能上的付出。

新建一个公共类:

public class UserManager extends HibernateDaoSupport {

private Hashtable<NetUserinfo, Long> userDao = new Hashtable<NetUserinfo, Long>();

private Hashtable<NetRoleinfo, Long> roleDao = new Hashtable<NetRoleinfo, Long>();

public UserManager() {

}

public void saveUser() {

HibernateTemplate ht = this.getHibernateTemplate();
List<NetUserinfo> lst = this.getHibernateTemplate().find(
"from NetUserinfo");
for (NetUserinfo userinfo : lst) {
System.out.println(userinfo.getUserName());
}

}
}

第一种采用JDK代理:

applicationContext.xml

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>

<bean id="userManager" class="sx.cj.security.service.UserManager"
scope="prototype">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

测试:

ApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[] { "applicationContext-common.xml",
"applicationContext-beans.xml" });
IUserManager userManager = (IUserManager) appContext
.getBean("userManager");
userManager.saveUser();

在测试文件中必须采用接口的方式,才能获得BEAN对象。

第二种:采用CGLIB代理

applicationContext.xml

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>

<bean id="userManager"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager"></ref>
</property>
<property name="target">
<bean class="sx.cj.security.service.UserManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
<property name="proxyTargetClass">
<value>true</value>
</property>
</bean>

测试文件

ApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[] { "applicationContext-common.xml",
"applicationContext-beans.xml" });
UserManager userManager = (UserManager) appContext
.getBean("userManager");
userManager.saveUser();

你可以只用对象而不需要使用接口。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pjchen/archive/2009/03/26/4028161.aspx

 

分享到:
评论

相关推荐

    java.lang.ClassCastException

    在Java编程中,`java.lang.ClassCastException`是一个运行时异常,通常发生在强制类型转换时,如果尝试将一个对象转换为其非兼容类型时就会抛出。这个异常表明在编译时可能成功的类型转换,在运行时被证明是错误的。...

    java.lang.NoClassDefFoundError错误解决办法

    而NoClassDefFoundError是在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.NoClassDefFoundError的错误。 错误解决步骤 1. 检查classpath中...

    android gson 混淆代码 问题

    在Android开发中,Gson库是一个非常常用的工具,它由Google提供,用于将Java对象转换为JSON字符串,反之亦然。然而,在混淆代码时,可能会遇到一些问题,导致Gson无法正常工作。本文将深入探讨这些问题及其解决方案...

    java操作xml dom dom4j sax jdom

    在Java编程中,XML(可扩展标记语言)是一种被广泛用于数据存储和交换的格式。为了处理XML文档,Java提供了多种API,其中最常用的包括DOM、SAX、DOM4J和JDOM。以下是对这些方法的详细介绍: 1. DOM(Document ...

    client-adapter.es7x-1.1.5-SNAPSHOT-jar-with-dependencies.jar

    Load canal adapter: es7 failed java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: ...canal-adapter1.1.5报错, 将client-adapter.es7x-1.1.5-SNAPSHOT-jar-with-dependencies....

    JAVA常见异常解析,面试用

    Java异常处理是编程中至关重要的一个环节,它帮助开发者识别并修复程序运行时可能出现的问题。在面试中,对Java异常的熟悉程度往往被视为衡量开发者经验和技术水平的重要标准。以下是一些Java常见异常的详细解析: ...

    java编程常见问题

    7. **java.lang.VerifyError**: 验证器在类文件加载期间发现内部不一致或安全问题时抛出。这可能是由于编译器bug或恶意代码导致的。 8. **java.lang.VirtualMachineError**: 表示虚拟机严重损坏或资源不足。这可能...

    解决maven启动Spring项目报错的问题

    问题一:java.lang.ClassCastException 在使用 Maven 启动 Spring 项目时,可能会遇到以下报错信息: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast ...

    java异常解决方案.docx

    Java 异常是 Java 开发中经常遇到的问题,本文档将提供 Java 异常解决方案,涵盖 Hibernate、Tomcat、Java 基本、JSP、SSH 整合等多个方面的异常解决方案。 一、Hibernate 异常解决方案 * org.hibernate....

    java常见异常.pdf

    13. **java.lang.AssertionError**: 在调试过程中,用于表示断言失败。断言是一种编程技巧,用于在开发阶段验证代码假设。 14. **java.lang.ClassCircularityError** 和 **java.lang.ClassFormatError**: 这些属于...

    Android 简单封装一个精美、好用的菜单型PopupWindow

    在Android开发中,PopupWindow是一个非常实用的组件,它可以用于创建弹出式窗口,提供临时性的用户交互。本文将深入探讨如何在Android中简单封装一个精美、易用的菜单型PopupWindow,以满足用户界面的需求。 首先,...

    Java中常用异常列表[收集].pdf

    1. **`java.lang.NullPointerException`**:空指针异常。当程序试图访问或操作一个未初始化的对象引用时,就会抛出此异常。例如,调用一个null对象的方法或访问其属性。确保在使用对象之前已正确初始化。 2. **`...

    JAVA常见的错误

    java.lang.NullPointerException 是一种常见的错误,发生在程序中调用了未经初始化的对象或不存在的对象时。例如,在创建图片或调用数组时,如果图片未经初始化或数组元素未经初始化,就会出现该错误。解决方法是...

    java异常详解

    当Java虚拟机或ClassLoader试图加载并找到特定类时,但在类路径中找不到该类的字节码文件(`.class`文件),则会抛出`java.lang.ClassNotFoundException`。此异常常见于以下情况: - **开发环境差异**:例如,在...

    java 异常种类总结【转】.docx

    java.lang.UnsupportedClassVersionError 是一种不支持的类版本错误,指的是在程序中 Java 虚拟机试图从读取某个类文件,但是发现该文件的主、次版本号不被当前 Java 虚拟机支持的时候,抛出的异常。 33. java.lang...

    java.lang.ClassCastException(解决方案).md

    常见的问题

    JAVA常见异常解析

    在Java编程中,异常处理是一项重要的技能,它帮助开发者捕获并处理程序运行时可能出现的问题。以下是对Java中一些常见异常的详细解析: 1. **java.lang.NullPointerException**: 当尝试访问或操作一个null引用的...

    安卓自动轮播图 广告位

    二:保证 ImageCycleView的 父布局是LinearLayout 否则可能会报异常,比如 java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.RelativeLayout$...

Global site tag (gtag.js) - Google Analytics