我对直接字段依赖注入很感兴趣。传统上,Spring支持构造函数注入(向构造函数提供参数)和基于setter的注入(在调用时调用setter)。
然而,Spring也能够进行直接字段注入(设置对象的成员字段而不使用setter方法),这可以通过使用@Autowired
注释字段来证明。自动装配仅限于“bean”,因此不能注入原始值(尽管可以通过创建类为“java.lang.String”的bean来绕过这个问题 - 这可以工作,但具有自动装配的普通警告)。除此之外,Spring还支持@Value
从属性等直接将值设置到成员字段中。
然而,Spring不允许属性直接设置为成员字段(而不进行自动装配)。
我的问题是:为什么?
显然它有能力这样做,那为什么没有呢?是否存在任何严重的负面影响阻止了这样做?或者说这种能力受到限制,因此只有自动装配才有意义?需要比调用setter更大的hack吗?
请注意,我不希望讨论一般情况下是否应该拥有setter和getter,只是想了解Spring做出这个选择的原因。