一位同事要求我将 setter 移至 Spring bean 中的构造函数,因为“setter 公开了一个私有(private)变量,该变量在 Spring 的构造阶段后可能会发生更改”。
虽然我可以理解这种情绪,但我不确定这是最好的方法吗?出于这个原因,我想知道 Spring bean 中是否有办法防止 setter 被调用两次,或者我们是否应该检查一下我们是否处于构建后阶段之前?
我担心构造函数使用索引,而不是命名属性。从代码维护的角度来看这不太友好。
最佳答案
当您在私有(private)字段上使用@Autowired
或@Inject
时,Spring支持通过反射插入字段值。这样,您就不必公开 setter,也不必使用构造函数来进行依赖项注入(inject)。
如果您希望 setter 存在,您可以考虑定义自己的注释、定义切入点并创建一个方面,以防止方法执行(如果该方法已在对象上调用至少一次)。
我个人更喜欢通过构造函数填充这些字段并标记为最终字段。当考虑代码的可读性时,由此生成的样板文件的数量有时可能令人望而却步。为了提高可读性,您可能需要使用@Qualifier
或@Named
注释来进一步指定当存在多种可能性时哪个对象应该满足依赖关系。
关于java - 防止setter在Spring bean中被调用两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31791404/