source

Java EE 6 @javax. 주석.Managed Bean과@paramax.displaces.displaces.이름 붙이기 vs@paramax.faces.Managed Bean

itover 2022. 12. 1. 21:31
반응형

Java EE 6 @javax. 주석.Managed Bean과@paramax.displaces.displaces.이름 붙이기 vs@paramax.faces.Managed Bean

Java EE 6 스펙이 조금 엉망이 된 것 같습니다.주석 세트에는 여러 가지가 있습니다.

우리는 가지고 있다.javax.ejb주석(예: '주석'과 같은 주석@Stateful ★★★★★★★★★★★★★★★★★」@StatelessEJB에 대해서

요.@javax.annotation.ManagedBean관리 대상 콩을 만듭니다.

에도 주석은 요.에 주석이 있어요.javax.enterprise.context@SessionScoped ★★★★★★★★★★★★★★★★★」@RequestScoped

에도 있다@ManagedBean ★★★★★★★★★★★★★★★★★」@SessionScoped/@RequestScopedjavax.faces.bean★★★★★★★★★★★★★★★★★★.

좀 더 하기 , 라고 하는 이 있습니다.javax.inject@Named석입니니다다

어떤 관계인지 설명해 주실 수 있나요?

할 수 요?@EJB,@Inject ★★★★★★★★★★★★★★★★★」@ManagedPropery아, 른른른?

먼저 몇 가지 설명을 해드리겠습니다.

관리빈 정의 : 일반적으로 관리빈이란 컨테이너에 의해 라이프 사이클(시공, 파괴 등)이 관리되는 오브젝트입니다.

Javae에는 JSF 컨테이너, EJB 컨테이너, CDI 컨테이너, Servlet 컨테이너 등과 같이 개체의 수명 주기를 관리하는 컨테이너가 많이 있습니다.

이러한 컨테이너는 모두 독립적으로 동작하며 애플리케이션 서버 초기화 클래스에서 부팅되며 배포 시 jar, ejb-jar, war, ear 파일 등의 모든 아티팩트를 스캔하여 메타데이터를 수집 및 저장합니다.실행 시 클래스의 오브젝트가 필요한 경우 이러한 클래스의 인스턴스를 제공합니다.일을 시작하라, 그들이 그들을 파괴할 것이다.

즉, 다음과 같은 것이 있습니다.

  • JSF 관리 콩
  • CDI 관리 콩
  • EJB 관리 콩
  • 그리고 서블릿도 관리 대상 콩입니다. 서블릿 컨테이너인 컨테이너에 의해 인스턴스화되고 파괴되기 때문입니다.

따라서 Managed Bean이라는 단어가 나타나면 해당 단어의 컨텍스트 또는 유형에 대해 물어봐야 합니다.(JSF, CDI, EJB 등)

그러면 왜 이러한 컨테이너가 많이 있는지 물어볼 수 있습니다. AFIK, Java EE는 종속성 주입 프레임워크를 원했지만 미래의 요구사항을 예측할 수 없었기 때문에 한 사양으로 모든 요구사항을 수집할 수 없었고 EJB 1.0 및 2.0을 만든 다음 3.0 및 3.1을 만든 EJB의 목표는 일부 사용자를 위한 것이었습니다.ts(트랜잭션, 분산 컴포넌트 모델 등)

동시에(병렬하게) JSF도 지원해야 한다는 것을 깨닫고 JSF 관리 콩과 JSF 콩을 위한 다른 용기를 만들어 성숙한 DI 용기로 간주했지만, 여전히 완전하고 성숙한 용기는 아니었다.

그 후, Gavin King과 다른 멋진 남자들;)은 제가 본 것 중 가장 성숙한 DI 용기인 CDI를 만들었습니다.CDI(Seam2, Guice 및 Spring에서 영감을 얻어)는 JSF와 EJB 사이의 공백을 메우기 위해 제작되었으며, Pojo 주입, 생산자 방법, 가로채기, 장식기, 통합 SPI, 매우 유연한 기능 등 다양한 기능을 갖추고 있으며, EJB와 JSF가 관리하는 DI를 한 개만 완성할 수 있습니다.그러나 하위 호환성과 정치적인 이유로 Java EE는 이를 유지하려고 합니다!!!

여기에서는 다음 각 유형의 차이점과 사용 사례를 확인할 수 있습니다.

JSF 관리 콩, CDI 콩 및 EJB

JSF는 처음에 주석 기반 콩을 포함하도록 JSF 2.0에 대해 향상된 자체 관리 콩 및 의존성 주입 메커니즘으로 개발되었다.CDI가 Java EE 6과 함께 출시되었을 때, 이 플랫폼은 해당 플랫폼의 관리 대상 프레임워크로 간주되었으며, 물론 EJB는 모두 10년이 훨씬 넘는 기간 동안 사용되었습니다.

물론 문제는 어떤 것을 언제 사용할지 아는 것입니다.

가장 심플한 JSF Managed bean부터 시작하겠습니다.

JSF 관리 콩

즉, Java EE 6용으로 개발하고 CDI를 사용하는 경우에는 사용하지 마십시오.이들은 의존관계 주입 및 웹 페이지용 백업 콩을 정의하는 간단한 메커니즘을 제공하지만 CDI 콩보다 훨씬 강력하지 않습니다.

은 '어리다'를 할 수 .@javax.faces.bean.ManagedBean옵션 이름 매개 변수를 사용하는 주석입니다.이 이름은 JSF 페이지에서 Bean을 참조하기 위해 사용할 수 있습니다.

는 '콩의 스코프'에 다른 중 할 수 .javax.faces.bean요청, 세션, 응용 프로그램, 보기 및 사용자 지정 범위를 포함하는 패키지입니다.

@ManagedBean(name="someBean")
@RequestScoped
public class SomeBean {
    ....
    ....
}

JSF 콩은 수동 코딩 없이 다른 종류의 콩과 섞일 수 없습니다.

CDI 빈즈

CDI는 Java EE 6의 일부로 출시된 콩 관리 및 종속성 주입 프레임워크로, 완전하고 포괄적인 관리 콩 기능을 포함합니다.CDI 콩은 단순한 JSF 관리 콩보다 훨씬 고급스럽고 유연합니다.가로채기, 대화 범위, 이벤트, 유형 안전 주입, 장식기, 고정관념 및 제작자 방법을 사용할 수 있습니다.

CDI bean classpath META-INF beans.xml 。이렇게 하면 패키지 내의 모든 콩이 CDI 콩이 됩니다.많은 되어 있어 할 수 JSF와 같은 의 간단한에 정의되어 있는 중할 수 .javax.enterprise.contextpackage( 「 」 , 「 」 , 「 」 , 「 )는, JSF사용CDI bean이름있습니다.javax.inject.Named 는 밭에 주석.javax.inject.Inject석입니니다다

@Named("someBean")
@RequestScoped
public class SomeBean {

    @Inject
    private SomeService someService;
}

위에서 정의한 것과 같은 자동 주입은 Qualifier를 사용하여 제어할 수 있습니다.Qualifier를 사용하면 삽입할 특정 클래스를 일치시킬 수 있습니다.여러 지불 유형이 있는 경우 비동기인지 여부에 대한 한정자를 추가할 수 있습니다.「 」는할 수 만,@NamedEL에서 콩을 노출하기 위해 제공되는 것이므로 한정자로 주석을 붙이면 안 됩니다.

CDI는 프록시를 사용하여 스코프가 일치하지 않는 콩의 주입을 처리합니다.따라서 요청 범위 빈을 세션 범위 빈에 삽입할 수 있으며 각 요청에 대해 프록시가 요청 범위 빈의 활성 인스턴스에 다시 연결되기 때문에 참조는 각 요청에서 여전히 유효합니다.

또한 CDI는 가로채기, 이벤트, 새로운 대화 범위 및 기타 많은 기능을 지원하므로 JSF 관리 대상 콩보다 훨씬 나은 선택지가 됩니다.

EJB

EJB는 CDI 콩보다 앞서며 어떤 면에서는 CDI 콩과 비슷하지만 다른 면에서는 매우 다릅니다.주로 CDI 콩과 EJB의 차이점은 EJB는 다음과 같습니다.

  • 트랜잭션
  • 리모트 또는 로컬
  • 스테이트풀한 콩을 패시브하여 자원을 해방할 수 있다
  • 타이머를 활용할 수 있다
  • 비동기화 가능

EJB의 두 가지 유형은 stateless와 stateful이라고 불립니다.상태 비저장 EJB는 두 웹 요청 간에 상태를 유지하지 않는 스레드 세이프 일회용 콩으로 간주할 수 있습니다.상태 저장 EJB는 상태를 유지하며 폐기될 때까지 필요한 만큼 생성 및 대기할 수 있습니다.

EJB를 만으로 끝납니다.음음음음 음음 음음 음음 음음javax.ejb.Stateless ★★★★★★★★★★★★★★★★★」javax.ejb.Stateful주석을 추가합니다.

@Stateless
public class BookingService {

  public String makeReservation(Item Item, Customer customer) {
    ...
    ...
  }
}

상태 비저장 콩에는 종속 범위가 있어야 하지만 상태 저장 세션 빈에는 범위가 있을 수 있습니다.기본적으로는 트랜잭션이지만 트랜잭션 속성 주석을 사용할 수 있습니다.

EJB와 CDI 콩은 특징 면에서 매우 다르지만, CDI 콩을 EJB에 주입하고 EJB를 CDI 콩에 주입할 수 있기 때문에 코드 작성은 매우 유사합니다.하나를 다른 하나에 주입할 때 구분할 필요가 없습니다.다른 스코프는 프록시를 사용하여 CDI에 의해 처리됩니다.이에 대한 예외 중 하나는 CDI가 리모트 EJB의 주입을 지원하지 않지만 간단한 제작자 방법을 작성하여 구현할 수 있다는 것입니다.

javax.inject.NamedEJB에서 주석 및 한정자를 사용하여 주입 지점에 일치시킬 수 있습니다.

어떤 콩을 사용할지

어떤 콩을 언제 사용해야 하는지 어떻게 알죠?간단하죠.

서블릿 컨테이너에서 작업하고 있고 Tomcat에서 CDI를 작업하려고 하지 않는 한 JSF 관리 대상 콩을 사용하지 마십시오(단, Maven의 원형도 있으므로 변명의 여지가 없습니다).

일반적으로 트랜잭션 함수 등 EJB에서 사용할 수 있는 고급 기능이 필요하지 않는 한 CDI bean을 사용해야 합니다.CDI 콩을 트랜잭션으로 만들기 위해 자신만의 인터셉터를 작성할 수 있지만, 현재로선 CDI가 곧 트랜잭션 CDI 콩을 얻을 때까지 EJB를 사용하는 것이 더 쉽습니다.서블릿 컨테이너에 갇혀 CDI를 사용하는 경우 수동으로 작성된 트랜잭션 또는 자체 트랜잭션 대행 수신기가 EJB가 없는 유일한 옵션입니다.

「 」를 사용할 수 .@ViewScoped를 사용해야 합니다.나는

  • seam-faces 또는 MyFaces CODI 모듈을 사용합니다.그 중 하나를 수업 경로에 추가하고@ViewScopedCDI를 사용하다 MyFaces CODI @ViewScoped >를 더욱 확실하게 합니다.
  • MyFaces MyFaces CODI를 합니다.@ViewAccessScopedApache가 CDI 위에 작성한 확장자이므로 다운로드하여 사용하세요.@ViewAccessScoped annot가 아닌 주석 。@ViewScoped.
  • CDI 를 합니다.@ConversationScoped오래 달릴 수 있게 해 주세요.자세한 내용은 여기를 참조해 주세요.
  • Omnifaces @ViewScope

여기서 훔친 부품도 있어요.

네, 헷갈릴 수 있어요.

역사적 이유로 JSF와 CDI는 범위에 동일한 주석을 사용하지만 패키지는 다릅니다.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★javax.faces.beanJSF의 CDI.특별한 이유가 없는 한 사용하지 마십시오.CDI의 CDI 과 함께 .javax.ejb이것에 의해, 버그나 미묘한 변칙의 리스트가 끝없이 작성됩니다.

일반적으로 우수한 용접 문서의 처음 몇 페이지(또는 그 이상)를 훑어보는 것이 좋습니다.이것으로 Java EE 6의 궤도에 오를 수 있을 것입니다.

그리고 여기에 더 많은 질문들을 올려주세요.

는 특별히 @javax.annotation.ManagedBean다음은 비슷한 질문의 답변 링크입니다.백킹(@Managed Bean) 또는 CDI(@Named)?이 사양은 http://download.oracle.com/otndocs/jcp/managed_beans-1.0-fr-eval-oth-JSpec/에서 확인할 수 있습니다.그래서 내가 보기엔@javax.annotation.ManagedBean의 했다.@javax.faces.bean.ManagedBean.

들은 Bean을 2될 수도 아마 JSF Managed Bean CDI Bean은 CDI Bean일 입니다.라고 생각합니다.@javax.annotation.ManagedBean점점 더 쓸모없어지고 있다.

언급URL : https://stackoverflow.com/questions/11986847/java-ee-6-javax-annotation-managedbean-vs-javax-inject-named-vs-javax-faces

반응형