如何解决SpringBoot将BeanNameGenerator配置为使用限定符名称
我正在使用proguard混淆代码并处理重复的bean定义名称,我正在使用自定义bean名称生成器来注册具有完全限定名称的bean。
public static class CustomGenerator implements BeanNameGenerator {
@Override
public String generateBeanName(BeanDeFinition deFinition,BeanDeFinitionRegistry registry) {
return deFinition.getBeanClassName();
}
}
ApplicationContext ctx = new SpringApplicationBuilder(DataQualityApplication.class)
.beanNameGenerator(new CustomGenerator())
.run(args);
但是,问题在于,现在正在使用其对应的类类型而不是通过@Qualifier
或@Component
中提供的限定符名称来注册Bean。
如何在我的项目中实现?
解决方法
如果使用类名作为bean名称,则意味着每种类型只能有一个bean。在这种情况下,只能按类型进行注入,只需删除@Qualifer并且不要命名您的bean,这应该可以正常工作。如果同一类有多个bean,则不能使用生成器。
,通过扩展AnnotationBeanNameGenerator而不是实现BeanNameGenerator接口来解决它
public static class CustomGenerator extends AnnotationBeanNameGenerator {
@Override
public String generateBeanName(BeanDefinition definition,BeanDefinitionRegistry registry) {
UnaryOperator<String> fun=pkgName->{
int lastIndex = pkgName.lastIndexOf ('.');
if (lastIndex!=-1){
pkgName=pkgName.substring (0,lastIndex);
}
return pkgName;
};
String className = super.generateBeanName(definition,registry);
String packagename = definition.getBeanClassName();
return (fun.apply(packagename) + "." + className);
}
}
如果带注释,则返回带限定符/组件名称的完全限定名称。 解决Proguard jar中重复的bean定义错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。