为什么Spring不支持直接的场依赖注入(自动布线除外)?
我对直接字段依赖注入感兴趣。传统上,Spring支持构造函数注入(向构造函数提供参数)和基于 setter 的注入(在调用时调用 setter)。
但是,Spring 还能够直接注入字段(在没有 setter 方法的情况下设置对象的成员字段),如 用 注释字段来证明。自动布线仅限于“beans”,因此无法注入原始值(尽管这可以通过创建类“java.lang.String”的bean来规避 - 这可以工作,但具有自动布线的正常警告。除此之外,Spring还支持从属性等直接设置成员字段的值。@Autowired
@Value
但是,Spring 不允许将属性直接设置为成员字段(不自动布线)。
我的问题是:为什么?
它显然有能力这样做,那么为什么不呢?是否有任何重大的负面副作用可以防止这种情况?还是功能以某种方式受到限制,因此只有自动布线才有意义?它需要比呼叫设置者更大的黑客吗?
请注意,我不想讨论一般拥有二传手和获取者的相对优点,只是Spring做出这一选择的原因。