Java 使用Autowire时,您在哪里设置要连接的bean?
当您使用Autowire注释标记某些内容时,您是说您希望该特定类(例如类)自动连接到DI 现在,您将要在Autowire中使用的目标类具体设置在哪里 参考: 因此,在下面的示例中,您可以自动关联setter:Java 使用Autowire时,您在哪里设置要连接的bean?,java,spring,Java,Spring,当您使用Autowire注释标记某些内容时,您是说您希望该特定类(例如类)自动连接到DI 现在,您将要在Autowire中使用的目标类具体设置在哪里 参考: 因此,在下面的示例中,您可以自动关联setter: public class SimpleMovieLister { private MovieFinder movieFinder; @Required public void setMovieFinder(MovieFinder movieFinder) {
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Required
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
// ...
}
spring会搜索实现接口MovieFinder的任何类吗?如果上下文中有MovieFinder类型的bean,它将被注入。如果有多个该类型的bean,将抛出异常 在构造函数注入的情况下,@Autowired和@Required我假定只是按类型自动连接的
如果要使用注释显式指定名称,请使用@Resourcename=beanId如果上下文中有MovieFinder类型的bean,则会将其注入。如果有多个该类型的bean,将抛出异常 在构造函数注入的情况下,@Autowired和@Required我假定只是按类型自动连接的 如果要使用注释显式指定名称,请使用@Resourcename=beanId spring会搜索任何类吗 它实现了接口 电影发现者 基本上,是的。当它发现多个异常时,它会变得有趣,在上下文启动时会抛出一个异常,除非您采取步骤帮助它 有3种方法可以解决多个autowire候选项: 使用autowire candidate=false标记您不想自动连线的对象。 用primary=true标记要自动连线的对象 通过指定@qualifier thebeaniwant来限定@Autowired注释 以上任何一项都可以,你可以选择最适合你的情况 @QualifierTheBeanIWant和@Resourcename=TheBeanIWant非常相似,不同之处在于@Qualifier帮助Spring缩小了自动连接的范围,而@Resource则显式地按名称挑选bean,而不考虑类型 spring会搜索任何类吗 它实现了接口 电影发现者 基本上,是的。当它发现多个异常时,它会变得有趣,在上下文启动时会抛出一个异常,除非您采取步骤帮助它 有3种方法可以解决多个autowire候选项: 使用autowire candidate=false标记您不想自动连线的对象。 用primary=true标记要自动连线的对象 通过指定@qualifier thebeaniwant来限定@Autowired注释 以上任何一项都可以,你可以选择最适合你的情况
@QualifierTheBeanIWant和@Resourcename=BeanIwant非常相似,不同之处在于@Qualifier帮助Spring缩小自动连接的范围,而@Resource则显式地按名称挑选一个bean,而不管类型如何。有时将所有内容都放在一个地方很好,例如xml文件,如果你掌握了注释,那么注释是非常有意义的。我明白了,如果你有1+个实现,你说你可以指定beanId,但是你需要用XML声明Bean,或者你可以通过注释设置beanId吗?你可以通过注释设置ID。此外,它们还有默认ID。例如@Component public class SomeBeanImpl的默认名称是someBeanImplits很好,所有东西都放在一个地方有时也就是xml文件,不,如果你掌握了注释,注释就非常有意义。我明白了,如果你有1+个实现,你说你可以指定beanId,但是,您需要用XML声明bean,或者您可以通过注释设置beanID吗?您可以通过注释设置ID。此外,它们还有默认ID。例如@Component公共类SomeBeanImpl具有默认名称SomeBeanImpl