我已经看到了将Logger实例创建为带有Spring注释(@Component
,@Service
)的类的静态属性的常规做法。
因为,默认情况下,所有创建的bean都是默认的单例。我们是否真的需要这个scnerio中的静态字段,因为毕竟只有一个实例?
答案 0 :(得分:3)
我认为可以将相同的问题用于final:“ 如果我知道我不会通过代码触摸变量,为什么将变量声明为final?”
事实是,您不是唯一触摸或阅读代码的人。赋予适当的语义含义对于可读且可维护的代码至关重要。您可能知道服务和/或控制器将是一个Singleton,因此不需要真正将变量放在static中,而是通过这种方式明确声明它。
添加:
如果构建失败:-)
,在单例构建期间您将如何记录某些内容?
我引用 @dognose 评论只是为了使答案更完整。使记录器成为静态地址存在一个实际问题:在创建过程中进行记录。
后续行动:
我只是想知道为什么我们需要最终的静态Logger而不是最终的Logger。是什么使记录器成为静态成员而不是仅成为类成员?
让我们假设您的课程不是单身人士。在这种情况下,记录器必须只记录日志。它与对象无关,它是一个类属性。这意味着,如果实例化一个或一千个对象,则记录器不会更改。这样,您就可以在所有对象之间共享它,从而使其成为静态对象。
让我们假设您的课程是单例。永远只有一个实例。静态仍然有用吗?从实际的角度来看,没有。您将只有一个类实例,因此只有一个记录器(静态或非静态)。但是,如果您声明它为静态,则表示您希望该记录器是该类的属性,而不是该类对象的属性。您正在使意图和设计明确化,从而提高了代码的质量。
希望这能回答您的问题。