Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.6 给自动检测组件命名

6.10.6 给自动检测组件命名

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

如果此类注不包含名称值或对于任何其他检测到的组件(例如通过自定义过滤器发现的那些组件),则默认的bean名称生成器将返回小写的非限定类名称。例如,如果以下两个组件被检测到,则名称为myMovieListermovieFinderImpl

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

如果您不想依赖默认的bean命名策略,则可以提供自定义bean命名策略。首先,实现BeanNameGenerator接口,并确保包含默认的无参数构造函数。然后,在配置扫描程序时提供完全限定的类名:

@Configuration
@ComponentScan(basePackages = "org.example", nameGenerator = MyNameGenerator.class)
public class AppConfig {
    ...
}
<beans>
    <context:component-scan base-package="org.example"
        name-generator="org.example.MyNameGenerator" />
</beans>

作为一般规则,使用注指定名称,不管在什么时候,其他组件也可以生成对它的明确的引用。另一方面,不管什么时候,容器都会负责连接,自动生成的名称就能够胜任了

posted @ 2019-03-01 17:47  编程老司机A  阅读(202)  评论(0编辑  收藏  举报