Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 跨dao方法使用会话对象UserBean_Java_Spring Mvc - Fatal编程技术网

Java 跨dao方法使用会话对象UserBean

Java 跨dao方法使用会话对象UserBean,java,spring-mvc,Java,Spring Mvc,我从会话中得到一个对象,比如UserBean public class UserBean { private String username; private String userid; private String userType; public String getUsername() { return username; } public void setUsername(String username) {

我从会话中得到一个对象,比如UserBean

public class UserBean {

    private String username;
    private String userid;
    private String userType;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getUserid() {
        return userid;
    }
    public void setUserid(String userid) {
        this.userid = userid;
    }
    public String getUserType() {
        return userType;
    }
    public void setUserType(String userType) {
        this.userType = userType;
    }

}
现在我想在我的许多dao方法中使用这个bean。我面临的问题是我必须修改我的dao参数以包含这个bean信息,我认为这不是一个好的设计

如何在不修改DAO方法的情况下包含UserBean细节


我使用的是spring MVC 3

DAO层不应该知道web会话。
在“上层”管理器或服务中实现会话相关逻辑。

在“重构”的情况下,除了良好的设计之外,它还可以作为Spring MVC层和DAO之间的适配器。您可以在DAO类中创建一个实例变量,并为此创建一个setter和getter


但是在调用任何DAO方法之前,您必须在该DAO中设置userBean,这也是不好的做法,但可能是解决方案之一。

我认为在DAO中访问web上下文类不是一个好主意,这将在层之间引入紧密耦合,并且在表示层中更改某些内容可能会影响DAO层对象。您可以将此信息作为方法参数传递给DAO类

但是,如果您确实想访问DAO中的会话属性,可以使用
RequestContextHolder
来实现以下目的:

ServletRequestAttributes request = (ServletRequestAttributes) RequestContextHolder
            .currentRequestAttributes();
HttpSession session = request.getRequest().getSession();
UserBean UserBean = (UserBean)session.getAttribute("userBean");
在实际web请求之外引用请求属性时,需要将
RequestContextListener
添加到web.xml以公开当前请求:

<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener> 

org.springframework.web.context.request.RequestContextListener

您可以将UserBean定义为SpringBean并使用Spring的会话范围。例如:



在Spring文档中。

您正在使用Hibernate吗?如果是这样,您可能会使用拦截器透明地添加此数据。假设DAO是singleton bean,这对并发请求不起作用。如果应用程序在Spring MVC上运行,则不需要在web.xml中添加Listner