복붙노트

[SPRING] Spring XML 네임 스페이스 : 구현 클래스가 무엇인지 어떻게 알 수 있습니까?

SPRING

Spring XML 네임 스페이스 : 구현 클래스가 무엇인지 어떻게 알 수 있습니까?

스프링 3.1 응용 프로그램에서는 내 컨텍스트 파일에서 일부 스프링 네임 스페이스의 기본 동작을 변경해야 할 때가 있습니다. 이를 위해, 일부 인터페이스를 구현하거나 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>

""네임 스페이스가 사용하는 클래스는 어떻게 찾습니까? 나는 http://www.springframework.org/schema/security/spring-security-3.1.xsd를보고 정보를 찾지 못했다!

어디를 봐야합니까?

해결법

  1. ==============================

    1.모든 Spring 네임 스페이스에는 연결된 NamespaceHandler 구현이 있습니다. 네임 스페이스 스키마는 다양한 spring.schemas 파일의 Spring JAR 내부의 스키마 파일에 매핑된다 (Spring DI applicationContext.xml에서 xsi : schemaLocation은 정확히 어떻게 사용 되는가? 참조).

    모든 Spring 네임 스페이스에는 연결된 NamespaceHandler 구현이 있습니다. 네임 스페이스 스키마는 다양한 spring.schemas 파일의 Spring JAR 내부의 스키마 파일에 매핑된다 (Spring DI applicationContext.xml에서 xsi : schemaLocation은 정확히 어떻게 사용 되는가? 참조).

    XML 스키마 네임 스페이스는 spring.handlers 파일의 핸들러 클래스에도 매핑된다 (각 Spring JAR이 다른 네임 스페이스를 도입 할 때마다 여러 개). 여기에 가장 일반적인 네임 스페이스 목록이 있습니다.

    이러한 각 클래스의 소스를 탐색하면 실제 XML 정의를 구문 분석하는 다양한 BeanDefinitionParser 구현을 신속하게 발견하게됩니다.

  2. ==============================

    2.거의 모두 BeanDefinitionParser로 명명됩니다. 첫 번째 단계는 브라우저를 사용하여 Spring JavaDoc을 시작하고 -F (또는 -F)를 누르는 것입니다. BeanDefinitionParser를 검색하십시오. 일치하는 클래스 중에서 하나 또는 두 개는 이름에 따라 연구중인 네임 스페이스 요소를 처리하는 것처럼 보입니다. 이러한 클래스의 소스 코드를 살펴 보는 데 약간의 시간이 걸릴 수 있지만 궁극적으로 원하는 것을 찾을 수 있습니다.

    거의 모두 BeanDefinitionParser로 명명됩니다. 첫 번째 단계는 브라우저를 사용하여 Spring JavaDoc을 시작하고 -F (또는 -F)를 누르는 것입니다. BeanDefinitionParser를 검색하십시오. 일치하는 클래스 중에서 하나 또는 두 개는 이름에 따라 연구중인 네임 스페이스 요소를 처리하는 것처럼 보입니다. 이러한 클래스의 소스 코드를 살펴 보는 데 약간의 시간이 걸릴 수 있지만 궁극적으로 원하는 것을 찾을 수 있습니다.

    또는 IDE에서 BeanDefinitionParser.java로 이동 한 다음 "Find Usages"(IntelliJ) 또는 "Type Hierarchy"(Eclipse)를 수행하여 해당 인터페이스의 모든 구현자를 찾을 수 있습니다. * BeanDefinitionParser 명명 규칙을 따르지 않는 소수의 클래스가 있습니다. IDE가 포괄적 인 목록을 제공합니다.

    나는 Spring이 실제로 참조 문서의 네임 스페이스 섹션에 각 요소를 처리하는 클래스의 이름을 문서화해야한다고 생각한다.

  3. ==============================

    3.모든 XML 이름 공간은 NamespaceHandler에 의해 구문 분석됩니다. 보안 네임 스페이스의 핸들러 클래스는 SecurityNamespaceHandler이며, 이는 spring-security-config-XXX.jar 파일의 META-INF 안에있는 spring.handlers 파일에 명시되어있다.

    모든 XML 이름 공간은 NamespaceHandler에 의해 구문 분석됩니다. 보안 네임 스페이스의 핸들러 클래스는 SecurityNamespaceHandler이며, 이는 spring-security-config-XXX.jar 파일의 META-INF 안에있는 spring.handlers 파일에 명시되어있다.

    http 요소는 HttpSecurityBeanDefinitionParser에 의해 구문 분석되고 자식 요소 로그 아웃은 org.springframework.security.config.http.LogoutBeanDefinitionParser (패키지 보호)에 의해 구문 분석됩니다.

    또한 NamespaceHandler 코딩에 대한 주석과 스프링 보안 네임 스페이스에 의해 등록 된 bean은 무엇입니까? 당신이 그것을 사용자 정의 할 계획이라면.

  4. ==============================

    4.Spring Security의 경우 잘 설명되어 있습니다 : 부록 B. 보안 네임 스페이스를 참조하십시오.

    Spring Security의 경우 잘 설명되어 있습니다 : 부록 B. 보안 네임 스페이스를 참조하십시오.

    이 블로그 게시물을 참조하십시오 : SPRING SECURITY NAMESPACE BEHIND

  5. from https://stackoverflow.com/questions/11174286/spring-xml-namespaces-how-do-i-find-what-are-the-implementing-classes-behind-t by cc-by-sa and MIT license