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

标签 java spring

一位同事要求我将 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/

相关文章:

java - 反序列化文件,然后将内容存储在 ArrayList<String> 中。 (java)

java - 在 Java Netbeans 生成的组合框中添加元素

java - Spring注解@RequestMapping不存在

java - Spring Boot 将 yaml 列表加载为 map

java - 将天数组织成年、月、日、小时的单独部分。 java

java - 如何从存在的多个整数中提取一个整数值

java - 如果同名字段继承自两个源(类和接口(interface))会发生什么

spring - Angular 2 和 Spring Boot - 部署到 war

java - Spring mongo 和 Joda DateTime

带有资源处理程序的spring boot错误页面