gpt4 book ai didi

java - Spring 中的应用程序上下文与 Web 上下文中的哪些 bean?

转载 作者:行者123 更新时间:2023-12-04 06:41:42 24 4
gpt4 key购买 nike

之间的分离应用上下文网络上下文 (以及随之而来的类加载器问题)对我来说一直是问题的根源。我在我的第一个项目中使用 Spring,从一个写得很糟糕的基于 JSP 的 web 应用程序迁移到基于 Spring 的 web 应用程序。

我只想知道这个配置是否有意义:

  • 我使用注释定义了 Controller 、表单对象等,并在 Web 应用程序上下文中进行了扫描。
  • 在最初将 DAO(数据访问对象)放在 Web 应用程序上下文中之后,我将它们移到了应用程序上下文 - 这是因为我需要使用它们来获取用户/密码以实现 spring 安全性,这是一个应用程序上下文 bean。
  • 如果在应用程序上下文中定义了 Spring 安全性(根据文档),则需要 DAO 来使用它。

  • 现在我遇到了类加载器问题,我将一个对象传递给 JDO/DataNucleus,它是由 Web 应用程序类加载器创建的,但 DAO 都是应用程序上下文的一部分,因此该组件有自己的类加载器并且无法匹配相同的对象。

    来自 DAO 的简单方法:
    @Override
    public boolean userExists(String username) {
    Query query = pm.newQuery(User.class);
    query.setFilter( "username == :usernameParam" );
    query.setResult( "count(username)" );
    query.setResultClass(Long.class);
    System.out.println(username);
    Long result = (Long)query.execute(username);

    return (result!=null && result>0);
    }

    javax.jdo.JDOUserException: The Query will return a single field but it is not of a consistent type as the ResultClass (java.lang.Long) : It is java.lang.Long



    我问是因为这不是第一个因 spring 配置方式而出现的类加载器问题(我担心不是最后一个),所以我想知道我是否做得不好。

    或者也许有一些配置可以解决我还不知道的这些类加载器问题?

    最佳答案

    类加载器应该与 Spring 上下文无关。 Web 应用程序上下文是一个 spring 容器,它通常包含 Controller 和 View 解析器。应用程序上下文包含 dao 的。 Web 应用程序上下文具有应用程序上下文作为父级,因此它可以访问 dao 和服务 bean,反之亦然。然而,这两个上下文都是同一个 war 的一部分,应该由同一个类加载器加载。

    看着你的异常,我想,它似乎与Spring没有任何关系。

    关于java - Spring 中的应用程序上下文与 Web 上下文中的哪些 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4153902/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com