春天的豆子案例是否具有感知性?
当我使用getBean("test")
我有一个类像
@Component
public class TEST {
}
这个豆子可以加载吗?
当我使用getBean("test")
我有一个类像
@Component
public class TEST {
}
这个豆子可以加载吗?
getBean()
是区分大小写的,但是Spring使用自定义bean命名策略和类。请参阅 4.10.5 命名自动检测到的组件:@Component
@Bean
当组件在扫描过程中被自动检测到时,其 Bean 名称由策略 [...] 生成。默认情况下,任何包含值的 Spring 构造型批注 (、 、 和 ) 都将因此将该名称提供给相应的 Bean 定义。
BeanNameGenerator
@Component
@Repository
@Service
@Controller
name
如果此类批注不包含任何值,或者对于任何其他检测到的组件(如由自定义筛选器发现的组件),则缺省 Bean 名称生成器将返回未大写的非限定类名。
name
有关 / 请参阅 4.12.4.5 自定义 Bean 命名:@Configuration
@Bean
缺省情况下,配置类使用方法的名称作为生成的 Bean 的名称。但是,可以使用该属性覆盖此功能。
@Bean
name
回到你的问题。因为你的类没有遵循Java命名约定(驼峰大小写名称),所以Spring对bean使用不寻常的名称,这将起作用:
getBean("TEST")
但是,如果使用预期的命名 (),则必须使用小写标识符:@Component class Test { }
getBean("test")
此外,如果您的名字更复杂,则适用未大写的驼峰大小写语法(继续引用Spring文档):
[...]例如,如果检测到以下两个组件,则名称将为 和 :
myMovieLister
movieFinderImpl
@Service("myMovieLister")
public class SimpleMovieLister {
// ...
}
@Repository
public class MovieFinderImpl implements MovieFinder {
// ...
}
@Component
默认情况下,注释使用,如果未显式指定名称,则将使用 Bean ClassName 上的方法获取 Bean 的名称。通常,名称为“Test”的类会给它一个豆子名称“test”。但有一个好奇心:AnnotationBeanNameGenerator
Introspector.decapitalize()
decapitalize
这通常意味着将第一个字符从大写转换为小写,但是在(不寻常的)特殊情况下,当有多个字符并且第一个和第二个字符都是大写时,我们就不用管它了。
所以你会得到豆子的名字。class TEST
TEST