Java 控制器应该是不可变的吗?

Java 控制器应该是不可变的吗?,java,Java,我已经知道什么是不可变的以及它是如何工作的,但最重要的是,这个理论适用于对象 拥有一个不可变的控制器值得吗 如果我的控制器是这样的呢 public class MyController { private MyService myService; public void doSomething(){ myService.something(); } public void setMyservice(final MyService myservi

我已经知道什么是不可变的以及它是如何工作的,但最重要的是,这个理论适用于对象

拥有一个不可变的控制器值得吗

如果我的控制器是这样的呢

public class MyController {

    private MyService myService;

    public void doSomething(){
       myService.something();
    }

    public void setMyservice(final MyService myservice){
       this.myservice = myservice
    }
}
假设MyService是“不可变的”,那么通过移除setter并仅通过构造函数初始化它,使我的控制器成为“不可变的”值得吗


有人能给我一个这样做的理由吗?

是的,让您的SpringBean不可变是值得的,您应该这样做

包含以下几个原因:

Spring团队通常提倡构造函数注入,因为它使人们能够将应用程序组件实现为不可变对象,并确保所需的依赖项不为空。此外,构造函数注入的组件总是以完全初始化的状态返回给客户机(调用)代码


这个参数不需要是最终的,顺便问一下,什么样的控制器?这可能有点重要。答案是“通常是的”,但框架有所不同。