是springgetbean案件是否传染?

当我使用getBean("test")

我有一个类似的课程

 @Component public class TEST { } 

可以加载这个bean吗?

getBean()区分大小写,但Spring对@Component@Bean类使用自定义bean命名策略。 请参见4.10.5命名自动检测的组件

当组件作为扫描过程的一部分自动检测时,其Bean名称由BeanNameGenerator策略生成[…]。 默认情况下,任何包含name值的Spring @Component型注释( @Component@Repository@Service @Controller@Controller )都将为相应的bean定义提供该名称。

如果此类注释不包含任何name值或任何其他检测到的组件(例如自定义filter发现的那些组件),则默认的bean名称生成器将返回未大写的非限定类名称

对于@Configuration / @Bean请参阅4.12.4.5自定义bean命名

默认情况下,配置类使用@Bean方法的名称作为结果bean的名称。 但是,可以使用name属性覆盖此function。

回到你的问题。 因为您的类不遵循Java命名约定(驼峰式名称),所以Spring会为bean使用不寻常的名称,这将起作用:

 getBean("TEST") 

但是,如果使用预期命名( @Component class Test { } ),则必须使用小写标识符:

 getBean("test") 

此外,如果您的名称更复杂,则应用非大写的camel-case语法(继续引用Spring文档 ):

[…]例如,如果检测到以下两个组件,则名称为myMovieListermovieFinderImpl

 @Service("myMovieLister") public class SimpleMovieLister { // ... } @Repository public class MovieFinderImpl implements MovieFinder { // ... } 

@Component注释默认使用AnnotationBeanNameGenerator ,如果没有明确给出名称,将使用bean ClassName上的Introspector.decapitalize()方法获取bean的名称。 通常,名为“Test”的类将为其提供bean名称“test”。 但是, decapitalize有一个好奇心:

这通常意味着将第一个字符从大写转换为小写,但在(exception)特殊情况下,当有多个字符并且第一个和第二个字符都是大写时,我们不管它。

所以你的class TEST将获得bean名称TEST