你可以使用 @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;
@Inject
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
// ...
}
使用 @Component
而不指定组件的名称是很常见的。@Named
可以以类似的方式使用,如下面的例子所示:
import javax.inject.Inject;
import javax.inject.Named;
@Named
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Inject
public 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 的原型模型来构建自定义组件注解。 :::