你可以使用 @javax.inject.Named或 javax.annotation.ManagedBean来代替 @Component,如下例所示:
import javax.inject.Inject;import javax.inject.Named;@Named("movieListener") // @ManagedBean("movieListener") 也可以使用这种方式public class SimpleMovieLister {private MovieFinder movieFinder;@Injectpublic void setMovieFinder(MovieFinder movieFinder) {this.movieFinder = movieFinder;}// ...}
使用 @Component而不指定组件的名称是很常见的。@Named可以以类似的方式使用,如下面的例子所示:
import javax.inject.Inject;import javax.inject.Named;@Namedpublic class SimpleMovieLister {private MovieFinder movieFinder;@Injectpublic void setMovieFinder(MovieFinder movieFinder) {this.movieFinder = movieFinder;}// ...}
当你使用 @Named或 @ManagedBean时,你可以以与使用 Spring 注解完全相同的方式使用组件扫描,正如下面的例子所示:
@Configuration@ComponentScan(basePackages = "org.example")public class AppConfig {// ...}
:::info 与 @Component 相比,JSR-330 的 @Named 和 JSR-250 的 ManagedBean 注解是不可组合的。你应该使用 Spring 的原型模型来构建自定义组件注解。 :::
