3.10.6 命名自动注册组件
扫描处理过程其中一步就是自动探测组件,扫描器使用BeanNameGenerator
对探测到的组件命名。默认情况下,各代码层注解(@Component,@Repository,@Service,@Controller
)所包含的name
值,将会作为相应的bean定义的名字。
如果这些注解没有name
值,或者是其他一些被探测到的组件(比如使用自定义过滤器探测到的),默认的bean name生成器生成,以小写类名作为bean名字。例如,如果检测到以下两个组件,则名称将是myMovieLister
和movieFinderImpl
:
@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>
生成规则应当如下,考虑和注解一起生成name,便于其他组件明确的引用。另一方面,当容器负责组装时,自动生成的名称就足够了。