如果没有明确的Bean定义,Spring Autowire将无法工作

时间:2018-08-01 15:18:16

标签: java spring dependency-injection autowired

我正在尝试使用Spring的Autowire,但是如果我没有使用@Bean注释显式定义Bean,则Bean实例化将失败。

这是示例代码:

@Component
public class Bar {
}


@Component
public class Foo {
    private final Bar bar;

    @Autowired
    public Foo(Bar bar) {
        this.bar = bar;
    }
}


@Configuration
@ComponentScan(basePackages = {"com"})
public class StringTest {

    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(TestConfig.class);

        Foo foo = ctx.getBean(Foo.class);

    }

}



@Configuration
public class TestConfig {

    @Bean
    public Foo foo(Bar bar) {
        return new Foo(bar);
    }

    @Bean
    public Bar bar() {
        return new Bar();
    }

}

这是一个有效的版本,但是如果我注释掉TestConfig类中的bean定义,spring不能实例化Foo,而我得到这个exepiton:

> Exception in thread "main"
> org.springframework.beans.factory.NoSuchBeanDefinitionException: No
> qualifying bean of type 'com.test.Foo' available  at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:347)
>   at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334)
>   at
> org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1107)
>   at com.test.StringTest.main(StringTest.java:15)

我要创建的Bean是一个具体的类,所以我认为spring应该可以自动找到它。

我应该始终在配置类中显式定义bean吗?

0 个答案:

没有答案