代码之家  ›  专栏  ›  技术社区  ›  David Parks

在Spring中,应用程序上下文和Web上下文中的bean是什么?

  •  2
  • David Parks  · 技术社区  · 14 年前

    分离 应用程序上下文 (以及随之而来的类装入器问题)是我经常遇到的问题。我在第一个项目中使用了Spring,从一个写得很糟糕的基于JSP的webapp迁移到了基于Spring的webapp。

    我只想知道这个配置是否合理:

    • 在最初将dao(数据访问对象)放在web应用上下文中之后,我将它们移到了应用上下文中——这是因为我需要使用它们来获取spring安全的用户/密码,spring安全是一个应用上下文bean。
    • 如果在应用程序上下文中定义了Spring安全性(根据文档),则需要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:查询 不是一致的类型 java.lang.Long语言

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

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

    1 回复  |  直到 14 年前
        1
  •  3
  •   lalit    14 年前

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