29

Spring 3.1アプリケーションでは、コンテキストファイル内の一部のSpring名前空間のデフォルトの動作を変更する必要がある場合があります。そのために、いくつかのインターフェイスを実装するか、Springが使用するデフォルトのクラスを拡張するカスタムクラスを作成します。

しかし、Springが名前空間の背後で使用しているクラスを正確に知るのは難しいと思います。それらを見つけるために必要な手順は何ですか?

たとえば、セキュリティ名前空間:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:sec="http://www.springframework.org/schema/security"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                           http://www.springframework.org/schema/security 
                           http://www.springframework.org/schema/security/spring-security-3.1.xsd">

とのようなもの:

<sec:http>
    ...
    <sec:logout />
</sec:http>

「<sec:logout/>」名前空間で使用されているクラスを見つけるにはどうすればよいですか?http://www.springframework.org/schema/security/spring-security-3.1.xsdを見て情報が見つかりません!

どこを見ればいいですか?

4

4 に答える 4

49

すべてのSpring名前空間には、関連するNamespaceHandler実装があります。名前空間スキーマは、さまざまなファイルのSpring JAR内のスキーマファイルにマップされspring.schemasます(Spring DI applicationContext.xmlも参照してください。xsi:schemaLocationはどの程度正確に使用されますか?)。

XMLスキーマの名前空間は、spring.handlersファイル内のハンドラークラスにもマップされます(各Spring JARが異なる名前空間を導入する可能性があるため、いくつかあります)。便宜上、ここに最も一般的な名前空間のリストを示します。

スプリングコア

春のセキュリティ

春の統合

これらの各クラスのソースを参照すると、BeanDefinitionParser実際のXML定義の解析を担当するさまざまな実装がすぐに見つかります。

于 2012-06-24T09:05:26.737 に答える
2

それらのほとんどすべてに名前が付けられてい*BeanDefinitionParserます。最初のステップは、ブラウザを使用してSpring JavaDocsを起動し、<Ctrl>-F(または<Command>-F)を押すことです。BeanDefinitionParserを検索します。一致するクラスのうち、1つまたは2つは、名前からすると、調査している名前空間要素を処理しているように見えます。これらのクラスのソースコードを見るのは少し時間がかかるかもしれませんが、最終的には必要なものが見つかります。

または、IDEで、 「使用法のBeanDefinitionParser.java検索」(IntelliJ)または「タイプ階層」(Eclipse)を参照して実行し、そのインターフェースのすべての実装者を検索することもできます。*BeanDefinitionParser命名規則に従わないクラスがいくつかあります。IDEは包括的なリストを提供します。

Springは、実際には、リファレンスドキュメントの名前空間セクションに、各要素を処理するクラスの名前を文書化する必要があると思います。

于 2012-06-24T02:39:46.560 に答える
1

すべてのXML名前空間は、そのNamespaceHandlerによって解析されます。セキュリティ名前空間のハンドラクラスはSecurityNamespaceHandlerであり、spring-security-config-XXX.jarファイルのMETA-INF内のspring.handlersファイルで指定されます。

http要素はHttpSecurityBeanDefinitionParserによって解析され、その子要素のログアウトはorg.springframework.security.config.http.LogoutBeanDefinitionParser(package-protected)によって解析されます。

NamespaceHandlerのコーディングの注記とSpringSecurity名前空間によって登録されるBeanのアドバイスも参照してください。あなたがそれをカスタマイズすることを計画しているなら。

于 2012-06-24T02:28:37.047 に答える
0

Spring Securityの場合は、十分に文書化されています。付録Bを参照してください。セキュリティの名前空間

このブログ投稿も参照してください:春のセキュリティ名前空間の背後にある

于 2012-06-25T03:58:43.617 に答える