3.10.6 命名自动注册组件

扫描处理过程其中一步就是自动探测组件,扫描器使用BeanNameGenerator对探测到的组件命名。默认情况下,各代码层注解(@Component,@Repository,@Service,@Controller)所包含的name值,将会作为相应的bean定义的名字。

如果这些注解没有name值,或者是其他一些被探测到的组件(比如使用自定义过滤器探测到的),默认的bean name生成器生成,以小写类名作为bean名字。例如,如果检测到以下两个组件,则名称将是myMovieListermovieFinderImpl:

@Service("myMovieLister")
public class SimpleMovieLister {
    // ...
}
@Repository
public class MovieFinderImpl implements MovieFinder {
    // ...
}
[Note]
如果你不想依赖默认的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,便于其他组件明确的引用。另一方面,当容器负责组装时,自动生成的名称就足够了。

results matching ""

    No results matching ""