java - 将 @Autowired 放入变量和方法有什么区别?

标签 java spring

Class A {

   private B instanceB;

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

}

上面一个对比这个。

Class A {

   @Autowired
   private B instanceB;

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

}

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

最佳答案

不同之处在于,如果你把它放在哪里,setter 就会被调用,如果它做其他有用的东西、验证等,这很有用。通常你是在比较:

public class A {
  private B instanceB;

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

public class A {
  @Autowired
  private B instanceB;
}

(即没有 setter )。

在这种情况下,第一个更可取,因为缺少 setter 会使模拟/单元测试更加困难。即使你有一个 setter 但 Autowiring 数据成员,如果 setter 做了一些不同的事情,你也会产生问题。这将使您的单元测试无效。

关于java - 将 @Autowired 放入变量和方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1659951/

相关文章:

java - 如何检测外部 Java 应用程序中的按钮何时被按下?

java - jsch session.connect() 问题

java - Spring websocket端点并发送消息

java - Spring 中 AspectJ AOP 配置的问题:java.lang.IllegalArgumentException: error at::0 找不到引用的切入点

java - 保持 JMS session 始终处于 Activity 状态

javascript - IF 语句中 JavaScript boolean 变量的比较

java - 尝试创建 Google Cloud Module 时的 Android Studio 1.3 Beta 1 错误

java - Android LinearLayout null 异常

Spring Boot 应用程序独立运行,但在 tomcat 7.X 中部署时不起作用

java - 如果我们从配置中保护 REST API,是否有必要在 Spring 中使用方法级安全性