spring cglib报错 xxx cannot be cast to xxx

问题描述

1,想使用ehcache+springjdbc实现查询结果缓存,现在功能都实现了,但是使用时报错:java.lang.ClassCastException:com.hbzx.bean.ShopViewCountBeancannotbecasttojava.util.Listatcom.hbzx.dao.ShopViewCountDao$$EnhancerBySpringCGLIB$$1c70ff76.queryAll(<generated>)atcom.hbzx.service.ShopViewCountService.fillHistory(ShopViewCountService.java:143)atcom.hbzx.service.ShopViewCountService.query(ShopViewCountService.java:46)atcom.hbzx.controller.UserCommissionController.getMyShopLog(UserCommissionController.java:45)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)atjava.lang.reflect.Method.invoke(Method.java:483)atorg.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)atorg.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)atorg.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:743)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:672)atorg.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:82)atorg.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:919)atorg.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851)atorg.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)atorg.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:618)atorg.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:725)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atnet.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:202)atnet.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:180)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)atorg.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)atorg.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)atorg.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)atorg.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)atorg.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)atorg.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556)atorg.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513)atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)atorg.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)atjava.lang.Thread.run(Thread.java:745)

解决方案

解决方案二:
配置文件:<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"default-autowire="byName"xmlns:p="http://www.springframework.org/schema/p"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:cache="http://www.springframework.org/schema/cache"xsi:schemaLocation="http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.2.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.2.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.2.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.2.xsdhttp://www.springframework.org/schema/cachehttp://www.springframework.org/schema/cache/spring-cache-3.2.xsd"><!--配置Ehcache缓存管理器,读取配置文件--><beanid="cacheManagerFactory"class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"><propertyname="configLocation"value="classpath:/conf/spring/ehcache.xml"></property></bean><!--配置缓存管理器,获取cache--><beanid="cacheManager"class="org.springframework.cache.ehcache.EhCacheCacheManager"><propertyname="cacheManager"ref="cacheManagerFactory"/></bean><!--开启缓存对注解的支持--><cache:annotation-drivencache-manager="cacheManager"proxy-target-class="true"/><context:component-scanbase-package="com.hbzx.dao,com.hbzx.service,com.hbzx.processor,com.hbzx.util,com.hbzx.sdk,com.hbzx.data"/><beanclass="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/><!--引入外部属性文件--><beanclass="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><propertyname="locations"><list><value>classpath:/conf/db.properties</value><value>classpath:/conf/redis.properties</value></list></property></bean><!--定义数据源,配置数据库连接池--><beanid="dataSourceSpied"class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><propertyname="user"value="${hbzx.web.username}"/><propertyname="password"value="${hbzx.web.password}"/><propertyname="driverClass"value="${hbzx.web.driverClassName}"/><propertyname="jdbcUrl"value="${hbzx.web.url}"/><propertyname="maxPoolSize"value="${hbzx.web.maxPoolSize}"/><propertyname="minPoolSize"value="${hbzx.web.minPoolSize}"/><propertyname="acquireIncrement"value="${hbzx.web.acquireIncrement}"/><propertyname="initialPoolSize"value="${hbzx.web.initialPoolSize}"/><propertyname="maxStatements"value="${hbzx.web.maxStatements}"/><propertyname="maxStatementsPerConnection"value="${hbzx.web.maxStatementsPerConnection}"/><propertyname="maxIdleTime"value="${hbzx.web.maxIdleTime}"/></bean><beanid="dataSource"class="net.sf.log4jdbc.Log4jdbcProxyDataSource"><constructor-argref="dataSourceSpied"/></bean><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"><propertyname="dataSource"ref="dataSource"/></bean><!--使用JDBC事物--><beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"/></bean><!--使用annotation注解方式配置事务--><tx:annotation-driventransaction-manager="transactionManager"proxy-target-class="true"/><beanid="jedisPoolConfig"class="redis.clients.jedis.JedisPoolConfig"><propertyname="maxTotal"value="${redis.pool.maxTotal}"/><propertyname="maxIdle"value="${redis.pool.maxIdle}"/><propertyname="timeBetweenEvictionRunsMillis"value="${redis.pool.timeBetweenEvictionRunsMillis}"/><propertyname="minEvictableIdleTimeMillis"value="${redis.pool.minEvictableIdleTimeMillis}"/><propertyname="testOnBorrow"value="${redis.pool.testOnBorrow}"/></bean><beanid="jedisPool"class="redis.clients.jedis.JedisPool"><constructor-argindex="0"ref="jedisPoolConfig"/><constructor-argindex="1"value="${redis.pool.host}"/><constructor-argindex="2"value="${redis.pool.port}"/><constructor-argindex="3"value="5000"/></bean><beanid="connectionFactory"class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"><propertyname="hostName"value="${redis.pool.host}"/><propertyname="port"value="${redis.pool.port}"/><propertyname="poolConfig"ref="jedisPoolConfig"/><propertyname="timeout"value="${redis.timeout}"/></bean><beanid="redisTemplate"class="org.springframework.data.redis.core.StringRedisTemplate"><propertyname="connectionFactory"ref="connectionFactory"/></bean><beanid="redisClient"class="com.hbzx.data.client.RedisClient"><propertyname="redisTemplate"ref="redisTemplate"/></bean><beanid="redisClient2"class="com.hbzx.data.client.RedisClient2"><propertyname="jedisPool"ref="jedisPool"/></bean><beanid="categoryWordSegment"class="com.hbzx.data.client.WordSegment"><constructor-argindex="0"value="/data/category"/></bean><beanid="taskExecutor"class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"><!--线程池至少有2个线程是启动的,即使是空闲的也不会关闭--><propertyname="corePoolSize"value="2"/><!--线程池至少有2个线程是启动的,即使是空闲的也不会关闭--><propertyname="maxPoolSize"value="10"/><propertyname="queueCapacity"value="2000"/><propertyname="keepAliveSeconds"value="2000"/><propertyname="rejectedExecutionHandler"><beanclass="java.util.concurrent.ThreadPoolExecutor$AbortPolicy"/></property></bean><beanid="dnaWishResultDao"class="com.hbzx.dao.DnaWishResultDao"><propertyname="redisClient"><reflocal="redisClient"/></property></bean><beanid="dnaWishResultService"class="com.hbzx.service.DnaWishResultService"><propertyname="dnaWishResultDao"ref="dnaWishResultDao"></property></bean><beanid="queryClient"class="com.hbzx.data.client.QueryClient"><!--<constructor-argindex="0"ref="wordSegment"/><constructor-argindex="1"value="121.199.25.186"/>--><constructor-argindex="0"value="218.244.129.179"/><constructor-argindex="1"value="3312"/></bean><!--[END]阿里云ServiceYYF2013-08-27--><importresource="classpath*:conf/spring/timeTask.xml"/></beans>

解决方案三:
报错类:packagecom.hbzx.dao;importjava.util.List;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.cache.annotation.CacheEvict;importorg.springframework.cache.annotation.Cacheable;importorg.springframework.jdbc.core.JdbcTemplate;importorg.springframework.stereotype.Repository;importcom.hbzx.bean.ShopViewCountBean;@RepositorypublicclassShopViewCountDao{@AutowiredprivateJdbcTemplatejdbcTemplate;/***其他方式使用注解没有报错,只有这个方法使用注解缓存结果就报错,可能和泛型有关系*/@Cacheable(value="queryCache",key="#shopId")publicList<ShopViewCountBean>queryAll(LongshopId){if(shopId==null)returnnull;Stringsql="select*fromshop_view_countwhereshop_id=?";returnjdbcTemplate.query(sql,ShopViewCountBean.getRowMap(),shopId);}@CacheEvict(value="queryCache",key="#shopId")publicintupdate(LongshopId,LongstartTime,LongendTime){Stringsql="insertintoshop_view_countSELECTshop_id,type,if(type=2,(count(DISTINCTuuid)+IFNULL((selectsum(pviewcount)fromshop_pviewcount_prizeassppwherespp.shop_id=vl.shop_idandspp.updated_time>FROM_UNIXTIME(?,'%Y-%m-%d')andspp.updated_time<=FROM_UNIXTIME(?,'%Y-%m-%d')),0)),count(DISTINCTuuid))asnumber,?asupdate_timeFROMview_logasvlwherevl.created_time>?andvl.created_time<=?andvl.shop_id=?GROUPBYvl.shop_id,vl.typeonduplicatekeyupdatenumber=VALUES(number)+number";jdbcTemplate.update(sql,startTime,endTime,endTime,startTime,endTime,shopId);sql="updateshop_view_countsetupdate_time=?whereshop_id=?";returnjdbcTemplate.update(sql,endTime,shopId);}@Cacheable(value="queryCache",key="#shopId")publicShopViewCountBeanqueryOne(LongshopId){try{Stringsql="select*fromshop_view_countwhereshop_id=?limit1";returnjdbcTemplate.queryForObject(sql,ShopViewCountBean.getRowMap(),shopId);}catch(Exceptione){returnnull;}}}

解决方案四:
使用方式:@ServicepublicclassShopViewCountService{@AutowiredprivateShopViewCountDaoshopViewCountDao;@AutowiredprivateViewLogDaoviewLogDao;@AutowiredprivateSysConfigDaosysConfigDao;/***查询店铺基本访问信息**@authorLiuJunGuang*@paramshopId店铺号*@return*@date2015年1月16日下午4:30:14*/publicShopPerformanceBeanquery(LongshopId){updateHistory(shopId);//更新历史记录统计信息//填充今天开始时间历史记录信息ShopPerformanceBeanbean=newShopPerformanceBean(shopId);fillHistory(bean);//填充历史访问量returnbean;}privatevoidfillHistory(ShopPerformanceBeanbean){List<ShopViewCountBean>result=shopViewCountDao.queryAll(bean.getShopId());//省略N行代码}

解决方案五:
queryAll与queryOne使用的缓存一样(value一样),key的类型一样,这样肯定会冲突,将两个方法的key写成不一样
解决方案六:
queryAll查询出来的结果是ShopViewCountBean,但是你返回的是个list。所以不能转换
解决方案七:
引用2楼afgasdg的回复:

报错类:packagecom.hbzx.dao;importjava.util.List;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.cache.annotation.CacheEvict;importorg.springframework.cache.annotation.Cacheable;importorg.springframework.jdbc.core.JdbcTemplate;importorg.springframework.stereotype.Repository;importcom.hbzx.bean.ShopViewCountBean;@RepositorypublicclassShopViewCountDao{@AutowiredprivateJdbcTemplatejdbcTemplate;/***其他方式使用注解没有报错,只有这个方法使用注解缓存结果就报错,可能和泛型有关系*/@Cacheable(value="queryCache",key="#shopId")publicList<ShopViewCountBean>queryAll(LongshopId){if(shopId==null)returnnull;Stringsql="select*fromshop_view_countwhereshop_id=?";returnjdbcTemplate.query(sql,ShopViewCountBean.getRowMap(),shopId);}@CacheEvict(value="queryCache",key="#shopId")publicintupdate(LongshopId,LongstartTime,LongendTime){Stringsql="insertintoshop_view_countSELECTshop_id,type,if(type=2,(count(DISTINCTuuid)+IFNULL((selectsum(pviewcount)fromshop_pviewcount_prizeassppwherespp.shop_id=vl.shop_idandspp.updated_time>FROM_UNIXTIME(?,'%Y-%m-%d')andspp.updated_time<=FROM_UNIXTIME(?,'%Y-%m-%d')),0)),count(DISTINCTuuid))asnumber,?asupdate_timeFROMview_logasvlwherevl.created_time>?andvl.created_time<=?andvl.shop_id=?GROUPBYvl.shop_id,vl.typeonduplicatekeyupdatenumber=VALUES(number)+number";jdbcTemplate.update(sql,startTime,endTime,endTime,startTime,endTime,shopId);sql="updateshop_view_countsetupdate_time=?whereshop_id=?";returnjdbcTemplate.update(sql,endTime,shopId);}@Cacheable(value="queryCache",key="#shopId")publicShopViewCountBeanqueryOne(LongshopId){try{Stringsql="select*fromshop_view_countwhereshop_id=?limit1";returnjdbcTemplate.queryForObject(sql,ShopViewCountBean.getRowMap(),shopId);}catch(Exceptione){returnnull;}}}

/***其他方式使用注解没有报错,只有这个方法使用注解缓存结果就报错,可能和泛型有关系*/select*fromshop_view_countwhereshop_id=?你这个sql实际去库里查到底返回了几条数据?目测你这错误,该结果只有一条。和你的缓存没有关系

时间: 2024-08-09 22:11:07

spring cglib报错 xxx cannot be cast to xxx的相关文章

Spring aop报错:com.sun.proxy.$Proxyxxx cannot be cast to yyy

在使用Spring AOP时,遇到如下的错误: Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to com.spring.test.setter.Instrumentalistat com.spring.test.setter.test.main(test.java:12) 看报错信息,显示的是动态代理生成的类无法转换到我们自定义的实现类. 解决

spring mvc 报错,求解答,各位好心人必有好报。

问题描述 spring mvc 报错,求解答,各位好心人必有好报. 六月 07, 2015 6:55:04 下午 org.apache.catalina.core.StandardContext listenerStart 严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.sp

spring batch 报错,求大神赐教,急急急急。。。。。。

问题描述 spring batch 报错,求大神赐教,急急急急...... 2014-2-22 13:13:42 org.springframework.context.support.AbstractApplicationContext prepareRefresh 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@13d93f4: display name [org.spring

图片-加入biz层后,配置spring一直报错,求大神解决

问题描述 加入biz层后,配置spring一直报错,求大神解决

tomcat6 spring 启动报错

问题描述 tomcat6 spring 启动报错 java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: Root WebApplicationContext: startup date [Mon Jun 09 13:43:08 CST 2014]; root of context

spring security报错,实在是找不出原因

问题描述 spring security报错,实在是找不出原因 说明一下,给别人的项目部署的时候报错的,项目代码没问题,配置也不会错,找了很久的原因不知道错在哪. #这是spring security的配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:security

spring cloud 报错Error creating bean with name &amp;#39;hystrixCommandAspect&amp;#39; ,解决方案

  spring cloud 升级到最新版 后,报错: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hystrixCommandAspect' defined in class path resource [org/springframework/cloud/netflix/hystrix/HystrixCircuitBreakerConfiguration.cla

spring mvc-SpringMVC报错,求大神给我看看。我已经自己下载包了,导入还是没用

问题描述 SpringMVC报错,求大神给我看看.我已经自己下载包了,导入还是没用 严重: StandardWrapper.Throwablejava.lang.NoClassDefFoundError: javax/portlet/PortletException at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) at j

mvc+ef,更新数据时 报错 “attaching an entity of type xxx failed”

问题描述 publicstringAdd_Edit(Articleart,string[]menuIds,stringarticleTagses){//....if(art.ArticleId>0){dbContext.Entry(article).State=EntityState.Modified;a=dbContext.SaveChanges();UpdateArticleMenu_Tags(article.ArticleId,menuIds,articleTagses);}//....}