我可以在无状态会话bean中使用实例变量吗?

时间:2012-04-18 14:51:57

标签: java java-ee javabeans stateless

我知道无状态bean不会保持会话状态,但我需要的只是一个记录器。我应该在每个被调用的方法中获得记录器吗?如果没有,那么我应该在哪里初始化它?

这是肯定的,如果我编写这样的代码,我会在某些使用logger的方法中得到NullPointerException吗?

 @PostConstruct
 public void init() {
   logger = Logger.getLogger();
 }

3 个答案:

答案 0 :(得分:1)

我猜你不想要一个特定于请求/会话的记录器,对吧?在这种情况下,您甚至可以使用静态类成员添加记录器,并让所有bean实例使用相同的记录器。

答案 1 :(得分:0)

创建一个具有以下属性的单例类:

  1. 具有类本身类型的静态字段
  2. 私有构造函数,以确保此记录器只有一个实例 课程已启动
  3. getInstance()方法,它将提供该类的唯一实例
  4. getLogger()获取记录器的方法
  5. 在此类的构造函数中初始化记录器并且
    您可以在每次需要使用时从getLogger()方法获取记录器

答案 2 :(得分:0)

尝试:

private static final Logger log = Logger.getLogger();

如果你需要线程特定的值,请注意Logger的输出处理程序在每一行写入线程名称,你应该没问题。