防止在Spring bean中调用setter两次?

时间:2015-08-03 15:39:27

标签: java spring

我被一位同事要求将我们的setter移动到我们的Spring bean中的构造函数,因为" setter暴露了一个私有变量,该变量可能在Spring&#34的构建阶段后发生变化。

虽然我可以欣赏这种情绪,但我不确定这是最好的方法吗?出于这个原因,我想知道Spring bean中是否有方法可以阻止setter被调用两次,或者我们是否应该检查一下我们是否在构建后阶段之前?

我担心构造函数使用索引而不是命名属性。从代码维护的角度来看,这不是很友好。

1 个答案:

答案 0 :(得分:1)

当您在私有字段上使用@Autowired@Inject时,Spring支持通过反射插入字段值。这样,您就不会暴露setter,也不会使用构造函数进行依赖注入。

如果你想让setter出现,你可以考虑定义你自己的注释,定义切入点并创建一个方面,如果方法至少被调用一次,就会阻止方法执行。

我个人更喜欢通过构造函数填充这些字段并标记为final。在考虑代码的可读性时,由此产生的样板量有时可能过高。为了提高可读性,您可能希望使用@Qualifier@Named注释来进一步指定哪个对象在有多种可能性时应满足依赖性。