【发布时间】:2018-11-19 08:41:52
【问题描述】:
我已经看到将 Logger 实例创建为使用任何 Spring 注释 (@Component、@Service) 注释的类的静态属性的一般做法。
因此,默认情况下,所有创建的 bean 本质上都是单例的。我们真的需要这个 scnerio 中的静态字段,因为毕竟只有一次实例吗?
【问题讨论】:
-
将其设为静态有什么害处?如果它从一个组件变为您多次实例化的东西,那么您需要记住将其恢复为静态以避免创建不必要的记录器实例。如果我这样做了,我肯定我会忘记的。此外,一致性。
-
静态对象可以在没有对象初始化的情况下访问,单例不能。因此,它们的目的完全不同。
-
Spring
@Components 也可以是@RequestScoped。在那种情况下,它们不会是单例,所以你的第一个假设并不完全正确。 -
@Michael 如果构建失败,您将如何在单例构建过程中记录一些内容:-)?
-
@dognose 构造函数通常可以访问非静态记录器,前提是它们以常规方式声明。我删除了我的评论,因为我想您可能想要记录一个静态方法,但显然并非所有类都有它们
标签: java spring spring-framework-beans