programing

스프링 구성 XML 스키마: 버전 유무

bestprogram 2023. 3. 8. 21:53

스프링 구성 XML 스키마: 버전 유무

저는 봄이 처음입니다.한 가지 혼란스러운 점은 스키마가 버전화되어 있는 XML 설정 파일과 버전이 되어 있지 않은 XML 설정 파일을 볼 수 있다는 것입니다.예를 들어, 나는 가끔 이런 것을 본다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    
     <context:annotation-config/>
     <context:component-scan base-package="base.package"/>
    
</beans>

그리고 가끔 이런 식입니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
    
    <context:annotation-config/>
    <context:component-scan base-package="base.package"/>
    
</beans>

에 주의:spring-beans ★★★★★★★★★★★★★★★★★」spring-context을 사용하다

그래서 궁금한 건 어떤 스타일을 사용하고 그 이유는 무엇입니까?특히, 향후 버전화된 스키마를 사용할 수 없게 되어 Spring이 스키마를 갱신해도 비버전 스키마는 현재 애플리케이션과 호환성을 유지할 수 있습니까?

한 가지 부수적인 질문은 버전화된 스프링 스키마의 목록을 어디서 찾을 수 있는가 하는 것입니다.

"버전 없는" XSD는 애플리케이션에서 사용하는 프레임워크의 현재 버전에 매핑되므로 사용하는 것이 좋습니다.

이러한 XSD는 JAR에 포함되어 있기 때문에 어플리케이션과 툴은 웹에서 취득하려고 하지 마십시오.이 경우 일반적으로 앱이 사용 중인 프레임워크 버전보다 최신 버전의 XSD를 사용하려고 하거나 IDE/툴이 올바르게 구성되어 있지 않음을 의미합니다.

제가 알기로는 특정 XSD 버전을 사용해야 하는 경우는 단 한 가지뿐입니다. 즉, 최신 버전에서 사용되지 않거나 수정된 XML 속성을 사용하려고 할 경우입니다.그것은 아무리 좋게 말해도 자주 일어나지 않는다.

어쨌든 스프링 팀은 스프링 5.0 버전의 스키마를 공개해야 합니다(SPR-13499 참조).

"버전 없는 == 현재 버전"에 대한 추가 정보:

이러한 XSD 파일은 Spring JAR에 포함되어 있습니다.이러한 "버전리스" XSD는 빌드 중에 최신 버전으로 매핑됩니다(이 링크를 실제로 만드는 spring.schemas 파일 참조).또, 온라인으로 이용할 수 있는 파일도 같은 방법으로 작성됩니다(그래들 빌드의 「schemaZip」타겟을 참조).

이것이 가이던스인지 아닌지는 잘 모르겠습니다만, 제 개인적인 취향은 비버전 스키마를 참조하는 것입니다.일반적으로 스프링 프로젝트의 최신 버전(스프링 코어, 통합 등)에 반대한다면 비버전 스키마를 참조할 수 있습니다.

미버전 스키마는 프로젝트의 최신 버전을 가리키고 있기 때문에 Spring의 매우 오래된 버전(현재 릴리스된 4.0 버전에 대해 버전 2.5라고 함)을 사용하고 있는 경우 올바른 문법이 아닐 수 있습니다.이 경우 버전화된 스키마를 가리키는 것이 더 나을 수 있습니다.

여기서 한 가지 더 짚고 넘어가야 할 점은 가능하면 xml을 완전히 피하고 Java 기반의 @Configuration 스타일로 Spring bean을 설정하는 것이 좋다는 것입니다.

질문이 2년이 넘은 건 알지만 신중하게 진행하자는 게 제 생각입니다.

제 경우 스탠드아론의 CLI 툴, 즉 항아리를 개발하고 있었습니다.그리고 선언한 XSD가 버전이 아닌 경우 매우 이상한 오류를 발견하게 됩니다.다음 xml fragment를 검토합니다.

여기에 이미지 설명 입력

버전이 없으면value-separator속성 플레이스 홀더의 Atribute를 지정하면 다음 오류가 발생합니다.

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 22 in XML document from class path resource [META-INF/slitools/sli-cli-applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.3.2.2: Attribute 'value-separator' is not allowed to appear in element 'context:property-placeholder'.
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:399)

어떤 사람은 과도 의존성을 통해 대체 무엇을 끌어당기고 있는지 알아볼 수 있다(우리가 올바른 xd를 포함하는 올바른 병을 끌어당기고 있다는 것을 주의 깊게 검사했지만, 우리가 uber-jars를 구축할 때 shad 플러그인과 올바른 속성을 결합하고 있다는 것을 확인했습니다).

당연히 YMMV죠. 한 프로젝트에 효과가 있다면, 더 좋을 거예요.그러나 설명할 수 없는 이상한 오류가 나타나기 시작하고 근본 원인을 추적할 대역폭이 없는 경우, 정확히 말하면 더 좋습니다.

이에 대한 반론은 스프링 의존관계 버전을 변경할 경우 명시적인 xsd 버전이 올바른지 확인해야 한다는 것입니다.소프트웨어에서는 트레이드오프(및 의사결정의 결과를 파악하는 것)가 중요합니다.

나는 udemy의 봄 코스에 등록했다.나는 강사가 시키는 모든 단계를 따랐다.따라서 spring mvc를 사용하여 최대 절전 모드로 전환하면 스키마 문서 'http://www.springframework.org/schema/tx/spring-tx.xsd' 등을 읽지 못했습니다'라는 오류가 발생할 수 있습니다.

<mvc:annotation-driven/> and <tx:annotation-driven transaction-manager="myTransactionManager" /> elements

스프링 컨피규레이션파일에는 이 두 개의 URL이 있습니다.

    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd

    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx.xsd

xsi: schema Location으로 대체한

    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd

    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-4.2.xsd

실제로 저는 이 두 사이트 http://www.springframework.org/schema/mvc/과 http://www.springframework.org/schema/tx/에 방문하여 spring-mvc와 spring-parames의 최신 버전, 즉 spring-mvc-4.2.xsd와 spring-mvc-4.2.xd를 추가했습니다.

따라서 버전 no를 명시적으로 지정하는 것이 좋은 방법이라고 생각합니다.이게 도움이 됐으면 좋겠다.감사해요.

META-INF/spring.schemas 파일은 Jar에 있습니다.이 파일은 호환되는 모든 xsd 버전을 정의합니다.버전 번호 없이 URL을 가리키면 기본적으로 Jar 파일과 호환됩니다.classpath에 두 가지 다른 버전의 spring jar가 없는 한 응용 프로그램에는 런타임 오류가 없습니다.

버전이 없는 xsd를 사용하는 것이 좋습니다.그러면 툴링에서 사용 중인 스프링 jar 버전과 일치하는 xsd 버전을 선택할 수 있습니다(자리의 spring.schemas 파일을 참조하십시오).비호환성이 있는 경우 스프링 라이브러리를 업그레이드할 때(매우 드문 경우일 수 있음)에는, 빌드중에 취득할 수 있습니다.

이를 통해 해당 파일에 대해 버전화된 xsd를 도입할 필요가 있는지, 아니면 실제로 구식 및 권장되지 않는 속성/요소를 사용하는 것에서 발전시킬 필요가 있는지 여부를 결정할 수 있습니다.그게 나중이었으면 좋겠어요.

그렇지 않으면 사용되지 않을 수 있는 속성/요소를 영원히 사용할 위험이 있습니다.

언급URL : https://stackoverflow.com/questions/20894695/spring-configuration-xml-schema-with-or-without-version