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

时间:2011-08-11 18:26:04

标签: java spring annotations autowired

我有两个组件ABA取决于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);

config

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

<bean class="com.A" autowire="byType" />

效果很好。现在我也希望通过注释配置A。所以我将@Component注释添加到A

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

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

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

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

2 个答案:

答案 0 :(得分:5)

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

new ClassPathXmlApplicationContext("/spring.xml").getBean(B.class);

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

  

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

答案 1 :(得分:0)

我想你应该试试

@Component
public class A {
    @Autowired
    private B b;
    }
}

@Component
public class B {}

您可以参考以下链接中的示例: http://www.roseindia.net/tutorial/spring/spring3/ioc/autoscanig.html