Spring中的自动装配和注释配置

Sta*_*lin 4 java spring annotations autowired

我有2个组件AB.A取决于B.我写了类似的东西:

public class A {
    private B b;
    @Autowired
    public void setB(B b) {
        this.b = b;
    }
}

@Component
public class B {}

new XmlBeanFactory(new FileSystemResource("./spring.xml")).getBean(A.class);
Run Code Online (Sandbox Code Playgroud)

配置

<context:annotation-config/>
<context:component-scan
    base-package="com">
</context:component-scan>

<bean class="com.A" autowire="byType" />
Run Code Online (Sandbox Code Playgroud)

它工作得很好.现在我也希望A通过注释进行配置.所以我添加了@Component注释A

@Component
public class A {
    private B b;
    @Autowired
    public void setB(B b) {
        this.b = b;
    }
}
Run Code Online (Sandbox Code Playgroud)

A从配置中删除了说明.所以它只是

<context:annotation-config/>
<context:component-scan
    base-package="com">
</context:component-scan>
Run Code Online (Sandbox Code Playgroud)

但是B不再注射了.可能我应该指定自动装配类型或像这样的smt.那么我该如何解决呢?

Tom*_*icz 5

你必须使用ApplicationContext而不是普通的BeanFactory.似乎BeanFactory没有运行后处理器,包括寻找@Autowired注释的那个.我将尝试为此找到一份文档,同时尝试:

new ClassPathXmlApplicationContext("/spring.xml").getBean(B.class);
Run Code Online (Sandbox Code Playgroud)

BTW @Autowired对于setter,构造函数,字段等完全有效(来源):

将构造函数,字段,setter方法或配置方法标记为由Spring的依赖注入工具自动装配.