我仍然是JEE6的新手,它来自传统系统上的Servlets + JSP开发风格。在我工作的应用程序中,我们只是将对象放入以常量String键入的各种提供的作用域(请求,会话和应用程序)。例如,表示当前登录用户的User对象将位于“current_user”下键入的会话范围内。
我在新的JEE6应用程序中做了同样的事情,当用户登录User对象时绑定到会话范围。我想知道是否有更好的,更多的EE,处理这个?
我遇到的问题是,现在我已经将用户存储在会话中,再次访问它很尴尬。我可以通过JNDI查找或使用涉及FacesContext的几行样板代码获得它,但两者都不是很优雅。
而不是整个地方的锅炉板代码(在一些地方需要用户对象),如果我可以将对象注入到字段或方法中,那将是很好的。毕竟,会话中只有一个对象绑定到一个特定的名称,因此不应该对我要求的内容有任何歧义。这可能吗?
答案 0 :(得分:0)
也许CDI可以提供任何帮助?
您能否将实现User对象的方式定义为一个main方法? 如果是这样,并且您正在使用Java EE 6环境,则可以使用Producer方法。这些行之间的东西:
public class ClassWhichCanAccessUserObject {
@Produces
public User produceUser() {
User u = ... // get the user as you do it right now
return u;
}
}
然后在你想要使用这个类的地方,只需注入它(在字段或方法中)并使用它:
public class MyLogic {
@Inject
User u;
}
您需要记住将beans.xml文件添加到类路径中,因为没有CDI将不适用于您的模块。