Spring Maven项目混淆后遇NoSuchBeanDefinitionException的解决方案咨询
Spring Maven项目代码混淆后出现NoSuchBeanDefinitionException的问题
对基于Spring框架的Java Maven项目做代码混淆后,触发org.springframework.beans.factory.NoSuchBeanDefinitionException异常。项目中通过以下代码按名称获取Bean:
private Object getService(String serviceName) { return getInstance().getSpringContext().getAutowireCapableBeanFactory() .getBean(serviceName); }
混淆后SpringContext中缺失大量Bean,导致按名称获取Bean时报错。
已尝试的解决方案
- 使用ProGuard的
-keep、-dontobfuscate规则尝试保留完整类,未解决问题 - 尝试通过
@ComponentScan指定扫描名称、给Bean类添加@Named/@Service显式指定Bean名称(例如给InterfaceMasterService标注@Service("InterfaceMasterService")),混淆后反编译显示注解名称未被修改,但异常依旧触发
相关Bean类代码:
混淆前
//@Named("InterfaceMasterService") //@Component("InterfaceMasterService") @Service("InterfaceMasterService") @Transactional("Transactional") public class InterfaceMasterService {
混淆后反编译代码
@Service("InterfaceMasterService") @Transactional("Transactional") public class InterfaceMasterService {
咨询问题
- 是否存在专门避免修改Bean名称的混淆规则?
- 混淆Spring项目是否并非合理选择?
- 有没有其他适用于Spring项目的混淆方法?
内容的提问来源于stack exchange,提问作者Mohammed Kamran
相关产品推荐
相关产品推荐

