我用的时候 getBean("test")
我有一个类似的课程
@Component
public class TEST {
}
Run Code Online (Sandbox Code Playgroud)
可以加载这个bean吗?
Tom*_*icz 20
getBean() 是大小写敏感的,但是Spring使用自定义的bean命名策略@Component和@Bean类.请参见4.10.5命名自动检测的组件:
当组件作为扫描过程的一部分自动检测时,其bean名称由
BeanNameGenerator策略生成[...].默认情况下,任何Spring刻板印象注释(@Component,@Repository,@Service,和@Controller包含)name值,从而提供名字相应的bean定义.如果此类注释不包含任何
name值或任何其他检测到的组件(例如自定义过滤器发现的那些组件),则默认Bean名称生成器将返回未大写的非限定类名称.
并且@Configuration/ @Bean请参阅4.12.4.5自定义bean命名:
默认情况下,配置类使用
@Bean方法的名称作为结果bean的名称.但是,可以使用该name属性覆盖此功能.
回到你的问题.因为您的类不遵循Java命名约定(驼峰式名称),所以Spring会为bean使用不寻常的名称,这将起作用:
getBean("TEST")
Run Code Online (Sandbox Code Playgroud)
但是,如果使用预期的命名(@Component class Test { }),则必须使用小写标识符:
getBean("test")
Run Code Online (Sandbox Code Playgroud)
此外,如果您的名称更复杂,则应用非大写的camel-case语法(继续引用Spring文档):
[...]例如,如果检测到下面的两种成分,名称将是
myMovieLister与movieFinderImpl:
@Service("myMovieLister")
public class SimpleMovieLister {
// ...
}
@Repository
public class MovieFinderImpl implements MovieFinder {
// ...
}
Run Code Online (Sandbox Code Playgroud)
@ComponentAnnotationBeanNameGenerator默认情况下,注释使用(如果未显式指定名称)将使用Introspector.decapitalize()Bean ClassName上的方法来获取Bean的名称。通常,名称为“ Test”的类将为它提供bean名称“ test”。但decapitalize有一个好奇心:
这通常意味着将第一个字符从大写转换为小写,但是在(不寻常的)特殊情况下,如果有多个字符并且第一个和第二个字符均为大写,我们将不理会它。
这样您class TEST将获得bean名称TEST。
| 归档时间: |
|
| 查看次数: |
7828 次 |
| 最近记录: |