将@Autowired放到变量和方法之间有什么区别?

nov*_*ice 10 java spring

Class A {

   private B instanceB;

   @Autowired
   public setInstanceB(B instanceB) {
     this.instanceB = instanceB;
   }

}
Run Code Online (Sandbox Code Playgroud)

高于一对一.

Class A {

   @Autowired
   private B instanceB;

   public setInstanceB(B instanceB) {
     this.instanceB = instanceB;
   }

}
Run Code Online (Sandbox Code Playgroud)

行为会根据访问修饰符而有所不同吗?

cle*_*tus 15

区别在于如果你把它放在那里就会调用setter,如果它做其他有用的东西,验证等,这很有用.通常你要比较:

public class A {
  private B instanceB;

  @Autowired
  public setInstanceB(B instanceB) {
    this.instanceB = instanceB;
  }
}
Run Code Online (Sandbox Code Playgroud)

VS

public class A {
  @Autowired
  private B instanceB;
}
Run Code Online (Sandbox Code Playgroud)

(即没有制定者).

在这种情况下,第一种是优选的,因为缺少setter使得模拟/单元测试更加困难.即使你有一个setter但是自动装配数据成员,如果setter做了不同的事情,你也会产生问题.这会使您的单元测试无效.