應用程序上下文和Web上下文(以及類加載器問題)之間的分隔對我來說是一個常見的問題來源。我在第一個項目中使用Spring,從一個寫得很差的基於JSP的Web應用程序遷移到基於Spring的應用程序。Spring中的Application Context與Web Context有什麼關係?
我只是想知道,如果這個配置是有道理的:
- 我有控制器,表單對象,而這種使用註釋定義,並在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:查詢 將返回一個單一的領域,但它是 不是一致的類型作爲 ResultClass(java.lang中。龍):這是 java.lang.Long中
我問,因爲這不是第一類加載器問題(我不擔心最後一個)流行,因爲這樣SPRIN達g現在配置好了,所以我想知道我是否做得不好。
或者也許有一些配置可以解決我尚未意識到的這些類加載器問題?
您的術語令人困惑。 「應用程序上下文」和「網絡上下文」可以指代各種不同的東西,但是你正在使用它們就像它們指的是特定的東西。 – skaffman 2010-11-11 11:42:13
謝謝skaffman,我會說我指的是Spring的應用上下文(Spring-mvc術語是一個跨web應用的上下文,在這個上下文中,所有webapps都可以訪問bean),以及WebApp上下文,這是一個上下文其中創建了特定於單個webapp的所有bean。我的意思是使用Spring術語中的術語。 – 2010-11-12 15:44:36