
![[8.5.5.6 이상]](../ng_v8556.gif)
Contexts and Dependency Injection 1.2 동작 변경사항
Contexts and Dependency Injection(CDI) 1.2 구현에는 CDI 1.0으로부터 마이그레이션된 애플리케이션이 CDI 1.2에서 다르게 동작하거나 실패하도록 하는 몇 가지 동작 변경사항이 포함되어 있습니다.
동작 변경사항을 고려하여, 각 서버 인스턴스에 대해 CDI 1.0 기능 구현과 CDI 1.2 기능 구현 중 하나를 선택할 수 있습니다. 필요한 동작이 CDI 1.2 기능에만 포함되어 있는 경우에는 CDI 1.2 기능을 사용해야 합니다. CDI 1.2 기능의 동작 변경사항이 기존 애플리케이션에 부정적인 영향을 미치는 경우에는 CDI 1.0 기능을 사용하면 해당 애플리케이션의 기존 동작이 유지됩니다. CDI 1.0 기능과 CDI 1.2 기능은 서로 호환되지 않으므로 같은 서버에서 이러한 기능을 둘 다 사용할 수는 없습니다. 두 기능을 모두 구성하면 서버에서 구성 오류가 발생합니다.
CDI 1.0 기능은 CDI의 Apache OpenWebBeans 구현으로 빌드되었습니다. CDI 1.2 기능은 CDI의 Weld 구현으로 빌드되었습니다. 동작 변경사항은 이러한 두 구현 간의 차이점으로 인해 발생하였습니다.
Bean에 @Named 어노테이션 사용
@Named 어노테이션으로 클래스에 지정되는 기본 이름이 규정되지 않은 이름이며, 첫 번째 문자가 대문자에서 소문자로 변경됩니다. 예를 들면, TestBean이 기본적으로 testBean으로 지정됩니다. CDI 1.0 구현에서 이 동작은 모든 클래스 이름에 적용됩니다. Weld 구현은 클래스 이름에 대해 동작이 다른, 시작 부분에 여러 대문자가 있는 JavaBeans 스펙을 따릅니다. 이 경우에는 Bean에 지정된 이름에서 대문자가 제거되지 않습니다. 예를 들면, JSFTest는 JSP(JavaServer Page)에서 JSFTest를 사용하여 호출됩니다.
대화 ID CID
CDI 1.0 구현에서는 CID가 글로벌 범위에서 고유합니다. CDI 1.2에서 이는 각 HTTP 세션에서 고유합니다. 이 동작은 CDI 스펙을 따르는 것이며 Weld에 의해 선택된 규칙입니다. 글로벌 범위에서 고유한 CID를 얻으려면 대화 시작 시에 Conversation.begin을 호출하여 CID를 지정해야 합니다.
beans.xml 파일에서의 스키마 참조
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_1.xsd"
올바르지 않은 스키마가 사용되면 서버에 예외 오류가 발생합니다. org.jboss.weld.xml.disableValidating=true jvm 특성을
설정하면 beans.xml 파일의 유효성 검증을 끌 수 있으며, 이는 오류가 발생하는 것 또한 방지합니다. beans.xml 파일이 데코레이터 또는 인터셉터를
지정하는 경우에는 올바른 스키마가 사용되어야 하며, 그렇지 않은 경우에는 데코레이터 및 인터셉터가 올바르게 인스턴스화되지 않습니다. 암시적 Bean 아카이브
CDI 1.2 구현은 두 가지의 서로 다른 Bean 아카이브 유형(명시적 및 암시적)을 정의합니다.
- 버전 번호(1.1 이상) 포함, Bean 발견 모드 all 사용
- 버전 번호 없이
- 비어 있는 파일
암시적 Bean 아카이브는 2.5.1절 "어노테이션을 정의하는 Bean" 또는 하나 이상의 세션 Bean에 정의되어 있는 바와 같이 Bean 정의 어노테이션이 있는 하나 이상의 Bean 클래스를 포함하는 기타 아카이브입니다. Java™ EE 플랫폼용 Contexts and Dependency Injection 스펙을 참조하십시오.
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all"
version="1.1">
<cdi12 enableImplicitBeanArchives="false"/>
이 특성을 false로 설정하면 beans.xml 파일이 없는 아카이브가
암시적 Bean 아카이브가 되지 않습니다.