【问题标题】:Spring MVC: User object bean best practiveSpring MVC:用户对象 bean 最佳实践
【发布时间】:2015-04-04 20:58:14
【问题描述】:

我有一个小型 Spring MVC 应用程序,其中一些类依赖于 User 对象。

我想将它声明为@Component,这样我就可以使用@Autowired 注解从任何地方访问这个bean。

@Component
public class MyUser implements User {

    // private fields
    // getters and setters

    public void fillByName(String username) {
        userDao.select(username);
    }

}

显然,用户对象对于每个用户来说应该是唯一的。我使用 Spring Security,所以我的 SecurityContextHolder 中有用户名,我可以用它来初始化 User 对象。

初始化的最佳实践是什么?我应该像会话范围的bean一样声明它吗?或者我应该将它保留为单例类并只更新每个请求的所有字段?或者我应该为每个请求从 Controller 类创建一个新的 User 对象?

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

    我个人不喜欢将域对象作为组件的想法。 我建议将 MyUser 作为类并通过作为组件的 UserService (UserDao) 在需要的地方获取此对象。 当域对象意识到 DAO 思想时,这也不是一个好的设计。

    【讨论】:

    • 好的,谢谢。但是我应该通过 UserDao 为 Controller 类中的每个请求创建用户对象吗?或者我必须在会话中存储一次选择的用户对象?
    • 如果您的应用程序未水平缩放,则在会话中保存用户是一种正常做法。如果您不为 DAO 层使用缓存,则每次从数据库获取对象可能会很昂贵。
    • 而且,Controller 类是创建我的 User 对象的正确位置吗?
    • 如果是关于 Controller VS DAO 那么用户作为一个对象(new User())应该通过填充数据存储中的数据在 DAO 中创建,并且控制器调用此方法并获取填充的用户对象(请注意拥有 3 层方法控制器 -> 服务(业务逻辑)-> DAO)是一个很好的做法。如果是关于控制器 VS 过滤器(将用户放在会话中的位置),那么它实际上取决于您的应用程序。有时最好有一个过滤器来检查用户是否存在于会话中,如果不存在则获取它并添加到会话中
    • 没有。在您的控制器中,您执行 UserService.getUser()。在 UserService 中,您执行 UserDao.getUser() 并在需要时执行任何业务逻辑操作。所以控制器只调用服务,服务只调用DAO。您可以查看这篇文章以了解 3 层架构en.wikipedia.org/wiki/Multitier_architecture
    猜你喜欢
    • 2015-09-11
    • 2010-11-07
    • 2015-04-19
    • 2011-05-18
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    相关资源
    最近更新 更多