java - Spring 中的 Autowiring 和注解配置

标签 java spring annotations autowired

我有 2 个组件 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);

配置

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

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

它运行良好。现在我也想通过注释配置 A 。所以我在 A

中添加了 @Component 注解
@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不再注入(inject)了。也许我应该指定 Autowiring 类型或类似的 smt。那我该如何解决呢?

最佳答案

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

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

顺便说一句,@Autowired 在 setter、构造函数、字段等上完全有效(source):

Marks a constructor, field, setter method or config method as to be autowired by Spring's dependency injection facilities.

关于java - Spring 中的 Autowiring 和注解配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7030952/

相关文章:

java - Spring bean配置列表<map>

Spring Netflix eureka、zuul vs Spring 云数据流

java - 如何让接口(interface)注解被实现继承?

java - scala 宏注释的注释是什么?或者宏应用了多少次

javascript - 在网页上使用 Annotorious 时遇到的问题

java - 如何将 BorderLayout 与 Netbeans Matisse 一起使用

java - Maven - 在模块中运行 JUnit 测试套件

java - Spring Boot - Tomcat JNDI 在服务 bean 中失败

java - @RequestMapping ("/**") 不会加载js、css等静态内容

java - Spring JDBC在运行SQL脚本时无法处理DECLARE语句