Spring 实用方法将类转换为通用 bean 名称

gav*_*koa 7 java spring

我的来源有一个常数,即首字母降低的类名。

Spring 是否有实用方法可以将类类型转换为首字母降低的字符串?这使我可以安全地重构类名。

例如:

SpringXXX.defaultBeanNameYYY(MyCustomBeanFactoryProcessor.class)
Run Code Online (Sandbox Code Playgroud)

应该产生:

myCustomBeanFactoryProcessor
Run Code Online (Sandbox Code Playgroud)

And*_*lko 6

默认情况下,会调用形成 bean 名称的机制BeanNameGenerator(根据上下文的类型,可能是 theAnnotationBeanNameGenerator或 the DefaultBeanNameGenerator)。要生成名称,需要一个 bean 定义和该定义所在的上下文:

new AnnotationBeanNameGenerator().generateBeanName(definition, context);
Run Code Online (Sandbox Code Playgroud)

例如,您可以在给定实例BeanFactoryPostProcessor的子类中编写此处理ConfigurableListableBeanFactory

class MyCustomBeanFactoryProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException {
        String beanName = new AnnotationBeanNameGenerator()
                .generateBeanName(new AnnotatedGenericBeanDefinition(MyCustomBeanFactoryProcessor.class),
                                  (BeanDefinitionRegistry) factory);
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,如果我们放弃上下文和 Spring 所做的所有检查,我们可以只执行:

Introspector.decapitalize(MyCustomBeanFactoryProcessor.class.getSimpleName());
Run Code Online (Sandbox Code Playgroud)

或者

Introspector.decapitalize(ClassUtils.getShortName(MyCustomBeanFactoryProcessor.class));
Run Code Online (Sandbox Code Playgroud)