[英]Spring utility method to convert class to generic bean name
我的资源有一个常量,该常量是带有低位第一个字母的类名。
是否有Spring实用程序方法将类类型转换为首字母降低的字符串? 这使我可以安全地重构类名。
例如:
SpringXXX.defaultBeanNameYYY(MyCustomBeanFactoryProcessor.class)
应该产生:
myCustomBeanFactoryProcessor
默认情况下,形成Bean名称的机制称为BeanNameGenerator
(取决于上下文的类型,它可以是AnnotationBeanNameGenerator
或DefaultBeanNameGenerator
)。 要生成名称,它需要一个bean定义和一个上下文,该定义来自于:
new AnnotationBeanNameGenerator().generateBeanName(definition, context);
例如,您可以在提供ConfigurableListableBeanFactory
实例的BeanFactoryPostProcessor
子类中编写此处理过程:
class MyCustomBeanFactoryProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException {
String beanName = new AnnotationBeanNameGenerator()
.generateBeanName(new AnnotatedGenericBeanDefinition(MyCustomBeanFactoryProcessor.class),
(BeanDefinitionRegistry) factory);
}
}
最后,如果我们放弃上下文和Spring所做的所有检查,我们可以执行:
Introspector.decapitalize(MyCustomBeanFactoryProcessor.class.getSimpleName());
要么
Introspector.decapitalize(ClassUtils.getShortName(MyCustomBeanFactoryProcessor.class));
您可以这样写自己:
public class BeanUtils {
public static String firstToLowerCase(Class clazz) {
String string = clazz.getSimpleName();
String post = string.substring(1, string.length());
String first = ("" + string.charAt(0)).toLowerCase();
return first + post;
}
}
并这样调用: BeanUtils.firstToLowerCase(MyCustomBeanFactoryProcessor.class)
使用getSimpleName
字符串作为从@shi搜索查询,我发现一个这样实施了一丝spring-core/src/main/java/org/springframework/util/ClassUtils.java
:
/**
* Return the short string name of a Java class in uncapitalized JavaBeans
* property format. Strips the outer class name in case of an inner class.
* @param clazz the class
* @return the short name rendered in a standard JavaBeans property format
* @see java.beans.Introspector#decapitalize(String)
*/
public static String getShortNameAsProperty(Class<?> clazz) {
String shortName = getShortName(clazz);
int dotIndex = shortName.lastIndexOf(PACKAGE_SEPARATOR);
shortName = (dotIndex != -1 ? shortName.substring(dotIndex + 1) : shortName);
return Introspector.decapitalize(shortName);
}
用法:
@Test
public void my() {
String str = org.springframework.util.ClassUtils.getShortNameAsProperty(MyCustomBeanFactoryProcessor.class);
Assert.assertEquals("myCustomBeanFactoryProcessor", str);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.