Spring注入没有使用@Autowired注解

16 浏览
0 Comments

Spring注入没有使用@Autowired注解

我找到了一个有关依赖注入的答案:https://stackoverflow.com/a/21218921/2754014。在这个例子中没有使用类似于@Autowired@Inject@Resource的注解。假设这个TwoInjectionStyles的bean没有任何XML配置(除了简单的)。

在没有指定注解的情况下进行注入,这样做是正确的吗?

0
0 Comments

从Spring 4.3版本开始,构造器注入不再需要使用注解。但是,对于setter注入仍然需要使用注解。我刚刚使用Spring Boot 1.5.7(使用Spring 4.3.11)验证了一下,当我移除注解时,bean没有被注入。

因此,这个stackoverflow.com/a/21218921/2754014的答案是不正确的。

除非我漏掉了什么,不加注解是行不通的。所以你是对的,没有任何xml配置的情况下,这个答案是不正确的。

这个官方示例有点误导人。我之前认为如果setter方法有一个无参构造函数,那么setter注入就能正常工作。 docs.spring.io/spring/docs/4.3.x/spring-framework-reference/…

0
0 Comments

在Spring 4.3版本及之后的版本中,如果一个bean只有一个构造函数,那么可以省略@Autowired注解。但是需要注意以下几点:

1. 如果存在一个构造函数和一个被@Autowired注解标记的setter方法,那么构造函数和setter方法都会被调用:

public class TwoInjectionStyles {
    private Foo foo;
    public TwoInjectionStyles(Foo f) {
        this.foo = f; //首先被调用
    }
    public void setFoo(Foo f) { 
        this.foo = f; //其次被调用
    }
}

2. 另一方面,如果没有任何@Autowired注解(就像在你提供的例子中),那么f对象只会通过构造函数注入一次,setter方法可以按照普通的方式使用,不会进行任何注入操作。

0