Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >springaop问题——Cannot subclass final class org.springframework.boot.autoconfigure.AutoConfigurationPac

springaop问题——Cannot subclass final class org.springframework.boot.autoconfigure.AutoConfigurationPac

作者头像
名山丶深处
发布于 2018-06-20 07:11:18
发布于 2018-06-20 07:11:18
1.8K00
代码可运行
举报
文章被收录于专栏:名山丶深处名山丶深处
运行总次数:0
代码可运行

问题描述:

在使用springaop对目标对象增强时,若切点的条件过于宽泛就会出现以下异常!

如:

@Before("execution(* *(..))")

@Before("args(..)")

@Before("within(org..*)")

...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.AutoConfigurationPackages': Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class org.springframework.boot.autoconfigure.AutoConfigurationPackages$BasePackages]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class org.springframework.boot.autoconfigure.AutoConfigurationPackages$BasePackages
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:120)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
	... 26 common frames omitted
Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class org.springframework.boot.autoconfigure.AutoConfigurationPackages$BasePackages]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class org.springframework.boot.autoconfigure.AutoConfigurationPackages$BasePackages
	at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:211)
	at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:109)
	at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:466)
	at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:349)
	at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:298)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:423)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1634)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
	... 40 common frames omitted
Caused by: java.lang.IllegalArgumentException: Cannot subclass final class org.springframework.boot.autoconfigure.AutoConfigurationPackages$BasePackages
	at org.springframework.cglib.proxy.Enhancer.generateClass(Enhancer.java:565)
	at org.springframework.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33)
	at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
	at org.springframework.aop.framework.CglibAopProxy$ClassLoaderAwareUndeclaredThrowableStrategy.generate(CglibAopProxy.java:999)
	at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:329)
	at org.springframework.cglib.proxy.Enhancer.generate(Enhancer.java:492)
	at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:93)
	at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91)
	at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61)
	at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34)
	at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:116)
	at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:291)
	at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:480)
	at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:337)
	at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:55)
	at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:201)
	... 47 common frames omitted

问题分析:

通过异常信息可以看出,当spring通过cglib给目标对象org.springframework.boot.autoconfigure.AutoConfigurationPackages$BasePackages进行增强时,发生了异常。

原因:

1)cglib增强技术,是通过继承原对象后动态创建子类来实现的。

2)通过查看BasePackages类源代码,发现该类被final修饰。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static final class BasePackages {
	...
}

3)java不允许继承被final所修饰的类。

解决方法:

以上问题出现的原因为aop定义的切点条件中,包含了被final所修饰的类。

1)通过修改类的访问修饰符解决。

2)通过调整切点条件,过滤final修饰的类。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java错误-java.lang.NoClassDefFoundError: org/aspectj/util/PartialOrder$PartialComparable
升级本地的aspectjweaver的版本。我们之前的是1.8.0,使用jdk8报错。升级aspectjweaver为1.8.13版本就好了。
挑战者
2019/02/26
1.5K0
SpringBoot- springboot集成Redis出现报错:No qualifying bean of type 'org.springframework.data.redis.conn...
Springboot将accessToke写入Redisk 缓存,springboot集成Redis出现报错
吟风者
2019/07/25
11.8K0
java.lang.IllegalStateException: Failed to load ApplicationContext by: org.springframework.beans.fac
Springboot启动报错 java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) at org.springframework.test
编程张无忌
2021/01/26
1.8K0
java.lang.IllegalStateException: Failed to load ApplicationContext by: org.springframework.beans.fac
nested exception is java.lang.IllegalStateException: refreshAfterWrite requires
已解决 nested exception is java.lang.IllegalStateException: refreshAfterWrite requires a LoadingCache异常解决
谙忆
2020/08/07
2K0
springboot+jpa 错误信息org.springframework.beans.factory.BeanCreationException报错信息实体类报错原因
报错信息 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityM
用户5899361
2020/12/07
7000
Caused by: java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory
项目原来使用mybaties, 在整合mybaties-plus时. 出现错误 java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory
时间静止不是简史
2022/04/02
3.9K0
开源规则引擎 Drools 学习笔记 之 -- 1 cannot be cast to org.drools.compiler.kie.builder.impl.InternalKieModule
此为初始化 drl 文件时的异常, 说明我们的 drl 文件不规范, Drools 不能解析成功.
凯哥Java
2022/12/16
7530
开源规则引擎 Drools 学习笔记 之 -- 1 cannot be cast to org.drools.compiler.kie.builder.impl.InternalKieModule
spring redis java.lang.IllegalStateException: Cannot load configuration class: redis.RedisTemplet报错
报错日志 java.lang.IllegalStateException: Cannot load configuration class: redis.RedisTemplet at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:414) ~[spring-context-5
MickyInvQ
2020/09/27
2.1K0
解决apollo的configService服务启动异常
apollo是一个非常流行的开源的配置中心项目,这里就不多介绍了。接触过apollo和运行过apollo的人肯定都遇到过启动configService时抛异常了,而且100%会抛一个异常。原因是,在apollo的架构中configService既作为config服务,同时也承载了metaService的功能,所以这个模块,既作为eureka的服务端也是eureka的客户端,这就造成了应用启动时,eurekaServer未完全启动,eurekaClient拉取注册表信息时就抛异常了。不过这个拉取动作是在独立的线程中运行的,独立于启动应用的主线程,所以异常并不影响应用的启动,这个问题也就一直从开源到留到了现在。目前,这个问题已被博主解决,正在合并pr中。
kl博主
2023/11/18
1.1K0
springboot2.0+yml 整合多数据源问题配置文件如下读取配置文件报错信息如下解决办法
配置文件如下 spring: datasource: test1: 自己命名 driver-class-name: com.mysql.jdbc.Driver u
用户5899361
2020/12/07
5140
springboot 集成elasticsearch遇到的坑
最近开始学习elasticsearch,所以就想着在springboot里面集成一下elasticsearch,结果遇到了不少麻烦,下面总结一下,但愿大家和自己以后都少走弯路
Meet相识
2018/09/12
32.3K0
springboot 集成elasticsearch遇到的坑
Bean named ‘redisTemplate‘ is expected to be of type ‘org.springframework.data.redis.core.StringRedi
今天在做谷粒商城的时候引入redis作为缓存的时候,出现了这个错误,早上还是还好的。然后一直给我报org.springframework.beans.factory.UnsatisfiedDependencyException,本来我以为是idea又发病了,因为包扫描的路径是对的,也clean过了,就是还有问题,查了半个小时气死人
一个风轻云淡
2023/10/15
5590
Bean named ‘redisTemplate‘ is expected to be of type ‘org.springframework.data.redis.core.StringRedi
springboot【报错】
"C:\Program Files\Java\jdk1.8.0_341\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.profiles.active=dev -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.applic
MIKE笔记
2023/03/23
1.1K0
解决Initialization of bean failed; nested exception is org.springframework.aop.fra
解决Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class com.alibaba.alibrain.quotareport.controller.QuotaReportDayController: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class com.alibaba.alibrain.quotareport.controller.QuotaReportDayController at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)
大盘鸡拌面
2023/11/02
1.6K0
一个 dubbo 和 springboot 的兼容性问题
最近把dubbo的版本从2.7.3升级到2.7.15时,遇到一个报错 No application config found or it's not a valid config! ,对应的异常栈为:
xiaoxi666
2022/10/04
1.3K0
spring cloud 报错Error creating bean with name 'hystrixCommandAspect' ,解决方案
spring cloud 升级到最新版 后,报错: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hystrixCommandAspect' defined in class path resource [org/springframework/cloud/netflix/hystrix/HystrixCircuitBreakerConfiguration.class]: Bea
庞小明
2018/03/08
2.1K0
使用ControllerAdvice注意事项,Ambiguous @ExceptionHandler method mapped for [class org.springframework.web.
前言 ControllerAdvice非常好用,可以把系统内部的异常统一处理。用起来也很简单。比如,http://www.cnblogs.com/woshimrf/p/spring-web-400.html 而Spring提供了一个base类ResponseEntityExceptionHandler,可以使用这个来处理。但用的时候要注意,不要重复定义异常捕获,对于base里已经定义好的,只要overwrite就好,不要重复声明异常拦截。 以下来自stackoverflow 问题 @ControllerAd
Ryan-Miao
2018/03/14
2.5K0
SpringBoot多数据源unsatisfied dependency expressed through method 'entityManagerFactoryBuilder...
本来的项目(基于SpringBoot 2.0.5-RELEASE)集成了JPA、mybatis的注解、XML方式访问DB。 后面集成多数据源的时候启动SpringBoot时出现了如下错误:
青山师
2023/05/05
6820
【已解决】springcloud feign 启动报错Caused by: org.springframework.beans.factory.BeanCreationException: Error
小编在一个微服务项目中,进行feign的远程调用时,由于是跨服务之间的feign接口调用,出现了扫描不到接口的错误,也就是出错的原因!
掉发的小王
2022/07/11
2.1K0
【已解决】springcloud feign 启动报错Caused by: org.springframework.beans.factory.BeanCreationException: Error
Java - 死锁 Dead Lock 定位分析
JVM-11虚拟机性能监控与故障处理工具之【JDK的可视化工具-JConsole】
小小工匠
2021/08/17
9230
推荐阅读
java错误-java.lang.NoClassDefFoundError: org/aspectj/util/PartialOrder$PartialComparable
1.5K0
SpringBoot- springboot集成Redis出现报错:No qualifying bean of type 'org.springframework.data.redis.conn...
11.8K0
java.lang.IllegalStateException: Failed to load ApplicationContext by: org.springframework.beans.fac
1.8K0
nested exception is java.lang.IllegalStateException: refreshAfterWrite requires
2K0
springboot+jpa 错误信息org.springframework.beans.factory.BeanCreationException报错信息实体类报错原因
7000
Caused by: java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory
3.9K0
开源规则引擎 Drools 学习笔记 之 -- 1 cannot be cast to org.drools.compiler.kie.builder.impl.InternalKieModule
7530
spring redis java.lang.IllegalStateException: Cannot load configuration class: redis.RedisTemplet报错
2.1K0
解决apollo的configService服务启动异常
1.1K0
springboot2.0+yml 整合多数据源问题配置文件如下读取配置文件报错信息如下解决办法
5140
springboot 集成elasticsearch遇到的坑
32.3K0
Bean named ‘redisTemplate‘ is expected to be of type ‘org.springframework.data.redis.core.StringRedi
5590
springboot【报错】
1.1K0
解决Initialization of bean failed; nested exception is org.springframework.aop.fra
1.6K0
一个 dubbo 和 springboot 的兼容性问题
1.3K0
spring cloud 报错Error creating bean with name 'hystrixCommandAspect' ,解决方案
2.1K0
使用ControllerAdvice注意事项,Ambiguous @ExceptionHandler method mapped for [class org.springframework.web.
2.5K0
SpringBoot多数据源unsatisfied dependency expressed through method 'entityManagerFactoryBuilder...
6820
【已解决】springcloud feign 启动报错Caused by: org.springframework.beans.factory.BeanCreationException: Error
2.1K0
Java - 死锁 Dead Lock 定位分析
9230
相关推荐
java错误-java.lang.NoClassDefFoundError: org/aspectj/util/PartialOrder$PartialComparable
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验