Par*_*ras 4 java spring spring-framework-beans
我已经看到将 Logger 实例创建为用任何 Spring 的 Annotation ( @Component, @Service)注释的类的静态属性的一般做法。
因为,默认情况下创建的所有 bean 本质上都是单例的。我们真的需要这个 scnerio 中的静态字段,因为毕竟只有一次实例吗?
我认为同样的问题也可以问 finals:“如果我知道我不会通过代码接触它,为什么还要将变量声明为 final? ”
问题是,您并不是唯一一个接触或阅读代码的人。赋予正确的语义意义对于可读和可维护的代码至关重要。您可能知道服务和/或控制器将是一个单例,因此实际上不需要将变量放在静态中,但通过这种方式您可以显式声明它。
添加:
如果构建失败,您将如何在构建单身人士期间记录某些内容:-)
我引用@dognose评论只是为了使答案更完整。使记录器静态地址存在一个实际问题:在创建期间记录。
跟进:
我只是想知道为什么我们需要最终的静态 Logger 而不仅仅是最终的 Logger。什么证明记录器是静态成员而不仅仅是类成员?
让我们假设您的班级不是单身人士。在这种情况下,记录器必须只是记录。它与对象无关,它是一个类属性。这意味着如果你实例化一个或一千个对象,记录器不会改变。因此,您可以在所有对象之间共享它,从而使其成为静态。
假设您的班级是单身人士。永远只有一个实例。静态还有用吗?从实用的角度来看,没有。您将只有一个类实例,因此只有一个记录器,无论是否静态。尽管如此,如果您将其声明为静态,则您声明您希望该记录器成为该类的属性,而不是该类的对象的属性。您正在明确您的意图和设计,从而提高您的代码质量。
希望这能回答你的问题。