我在一个非常精简的 XML 应用程序中有一个 Spring MVC 控制器,我们使用了很多注释和尽可能少的配置。控制器正在工作,它还注入了许多资源值。但是我用这个控制器经历了一个非常奇怪的行为;不会注入引用其他组件的带注释的私有字段。这行不通。
@Controller
public class EntranceUnitController {
@Value("${remote.baseUrl}")
private String baseUrl = "http://localhost";
@Value("${remote.port}")
private String pushPort = "8080";
@Autowired
private HttpClientFactory httpClientFactory;
...
似乎在httpClientFactory
设置私有字段时还没有,如果我设置一个断点来检查null
创建控制器时当然设置的值。
但是,如果我为组件创建一个 setter 并注释 set-method 而不是私有字段,则控制器按预期工作。
@Controller
public class EntranceUnitController {
@Value("${remote.baseUrl}")
private String baseUrl = "http://localhost";
@Value("${remote.port}")
private String pushPort = "8080";
private HttpClientFactory httpClientFactory;
@Autowired
public void setHttpClientFactory(HttpClientFactory httpClientFactory) {
this.httpClientFactory = httpClientFactory;
}
...
对我来说,这真的很烦人。无论注入点,注释值的自动接线注入是否同时发生?即为什么用setter注入对象很重要?我认为私有字段注入直接跟在构造和设置器之后,我开始认为在这种情况下我错了......