Is spring getbean case sentitive or not?
java, spring
Solution
`getBean()` is case sensitive, however Spring uses custom bean naming strategy for `@Component` and `@Bean` classes. See 4.10.5 Naming autodetected components:
When a component is autodetected as part of the scanning process, its bean name is generated by the `BeanNameGenerator` strategy [...]. By default, any Spring stereotype annotation (`@Component`, `@Repository`, `@Service`, and `@Controller`) that contains a `name` value will thereby provide that name to the corresponding bean definition.
If such an annotation contains no `name` value or for any other detected component (such as those discovered by custom filters), the default bean name generator returns the uncapitalized non-qualified class name.
And for `@Configuration`/`@Bean` see 4.12.4.5 Customizing bean naming:
By default, configuration classes use a `@Bean` method's name as the name of the resulting bean. This functionality can be overridden, however, with the `name` attribute.
Back to your question. Because your class is not following Java naming conventions (camel-case names) Spring uses unusual name for the bean, this will work:
getBean("TEST")
However if you use expected naming (`@Component class Test { }`), you must use lower-case identifiers:
getBean("test")
Moreover if your name is more complex, uncapitalized camel-case syntax applies (continuing to quote the Spring documentation):
[...] For example, if the following two components were detected, the names would be `myMovieLister` and `movieFinderImpl`:
@Service("myMovieLister")
public class SimpleMovieLister {
// ...
}
@Repository
public class MovieFinderImpl implements MovieFinder {
// ...
}
Problem
when I use `getBean("test")` I have a class like ``` @Component public class TEST { } ``` can this bean be loaded?