2014-12-02 358 views
1

在Spring中,@Autowired注解是否只涉及一个对象?@Autowired是否只涉及一个对象?

@Autowired 
A object_a; 

@Autowired 
B object_b; 

@Autowired 
C object_c; 

@Autowired 
A object_a; 
B object_b; 
C object_c; 

他们是同样的事情?谢谢

回答

3

在你的问题的@Autowired的情况下是指只有一个对象。你以后的陈述只会自动装载object_a;

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

用在你解释的方式,它的字段级注解,适用于一个领域只有

请注意,如果您使用@Autowire在春天构造函数,你可以注入多个依赖,如一个例子

@Autowired 
public YourClass(A object_a, B object_b, C object_c) { 
    this.object_a = object_a; 
    this.object_b = object_b; 
    this.object_c = object_c; 
} 
2

@Autowire(像任何annotation)是特定于下一个语句。因此,你的例子是不一样的。

Autowired interface可以应用于一个构造函数,字段或方法:

@Target(value={CONSTRUCTOR,FIELD,METHOD}) 

关于你的评论给的例子:

@Autowired A a, B b, C c; 

如果abc的领域,它不会编译,因为每条语句只有一个字段声明。

如果它们不是,它将不会工作,因为它们不属于授权类型。

+2

而且如果我把对象放在同一行? '@Autowired一个object_a,B object_b,C object_c;' – Alex 2014-12-02 12:57:41

+1

为你编译@Alex? – 2014-12-02 12:59:11

+0

@Alex很好的问题,我没有考虑这种可能性:) – fxm 2014-12-02 13:09:28

0

不,他们不一样。 FieldDeclaration以分号结尾,按照JLS section 8.3。你可以写

@AutoWired A a, b, c; 

,并有自动连接适用于所有三种,但很可能没有太大的意义,因为你只能有每场声明类型...

干杯,