一次又一次地,我读到我们不应该在会话 bean 中使用静态变量。那么,我应该如何为这个 bean 获取一个记录器并在所有 bean 方法中使用它?
问问题
940 次
3 回答
7
我认为您对“规则”的解释过于严格。
您不应该将 servlet/session/bean 的任何类型的状态存储在静态变量中,因为该引用在该类型的所有实例之间共享。
但是,记录器(通常或不应该)保持任何状态。如果您遵循基于类名命名/分类记录器的通常做法,那么 IMO 使用对 Logger 实例的静态引用是非常好的:
public class SomeTypeOfBean {
private static final Logger log = Logger.getLogger(SomeTypeOfBean.class);
//...
}
于 2009-07-29T16:05:07.397 回答
3
只读非阻塞静态引用(这是记录器)通常没问题,如果周围有几个副本没有问题(由应用程序服务器决定)。
话虽如此,没有什么说记录器必须在静态变量中。它可以在一个实例变量中(如果您的记录器不可序列化,则可以是一个瞬态变量)。
使用 EJB 规则要实现的一件事 - 最重要的是要了解它们存在的原因以及可能导致应用程序服务器故障的原因(如果您确实在开发独立于应用程序服务器的应用程序服务器)。一旦你理解了这一点,你就知道如何使用它们(考虑到应用服务器对你的课程的期望,它们是有意义的)。如果它只是写在文档上的一堆任意规则,那么您将无法弄清楚如何使用它们,而不是被它们困住。
于 2009-07-29T16:33:40.970 回答
1
您可以将其设为非静态成员。
于 2009-07-29T15:50:39.483 回答