7.4. 관리 빈

Jakarta EE는 Jakarta Managed Beans 사양에 공통 정의를 설정합니다. Jakarta EE의 경우 관리 빈은 최소한의 프로그래밍 제한으로 컨테이너 관리 개체로 정의됩니다. 그렇지 않으면 약어 POJO(Plain Old Java Object)에서 알 수 있습니다. 리소스 주입, 라이프사이클 콜백 및 인터셉터와 같은 소규모 기본 서비스 세트를 지원합니다. Jakarta Enterprise Beans 및 Jakarta Contexts and Dependency Injection과 같은 병행 사양은 이 기본 모델을 기반으로 합니다.

단, 매개 변수가 없는 생성자가 있는 거의 모든 구체적인 Java 클래스 또는 주석 @Inject 로 지정된 생성자가 빈입니다. 여기에는 모든 JavaBean과 모든 Jakarta Enterprise Beans 세션 빈이 포함됩니다.

7.4.1. 빈인 클래스 유형

관리되는 빈은 Java 클래스입니다. Jakarta EE의 경우 관리되는 빈의 기본 라이프사이클 및 의미 체계는 Jakarta Managed Beans 1.0 사양에 의해 정의됩니다. 빈 클래스 @ManagedBean 에 주석을 달아 관리되는 빈을 명시적으로 선언할 수 있지만, 컨텍스트 및 종속성 주입에서는 필요하지 않습니다. 사양에 따라 Contexts 및 Dependency Injection 컨테이너는 다음 조건을 관리되는 빈으로 충족하는 모든 클래스를 처리합니다.

  • 정적인 내부 클래스가 아닙니다.
  • 구체적인 클래스이거나 @Decorator로 주석이 추가됩니다.
  • Jakarta Enterprise Beans 구성 요소 정의 주석이나 ejb-jar.xml 파일에서 Jakarta Enterprise Beans bean 클래스로 선언되지 않습니다.
  • javax.enterprise.inject.spi.Extension 인터페이스를 구현하지 않습니다.
  • 매개 변수가 없는 생성자 또는 @Inject 로 주석이 있는 생성자가 있습니다.
  • @Vetoed 또는 @Vetoed 로 주석이 추가된 패키지에 주석이 추가되지 않습니다.

관리 빈 유형의 무제한 빈 세트에는 빈 클래스, 모든 슈퍼 클래스 및 직접 또는 간접적으로 구현하는 모든 인터페이스가 포함되어 있습니다.

관리 빈에 공용 필드가 있는 경우 기본 범위 @Dependent 가 있어야 합니다.

@Vetoed

이 클래스에서 정의한 빈 또는 관찰자 방법이 설치되지 않도록 클래스를veto 처리할 수 있습니다.

@Vetoed
public class SimpleGreeting implements Greeting {
    ...
}

이 코드에서 SimpleGreeting 빈은 주입을 위해 고려되지 않습니다.

패키지의 모든 빈은 주입되지 않도록 할 수 있습니다.

@Vetoed
package org.sample.beans;

import javax.enterprise.inject.Vetoed;

org.sample .beans 패키지의 package-info. java 에 있는 이 코드는 이 패키지 내의 모든 빈이 삽입되지 않도록 합니다.

상태 비저장 Jakarta Enterprise Beans 또는 Jakarta RESTful Web Services 리소스 엔드포인트와 같은 자카르타 EE 구성 요소는 @Vetoed 로 표시되어 빈으로 간주되지 않도록 할 수 있습니다. @Vetoed 주석을 모든 영구 엔터티에 추가하면 BeanManager 가 엔터티를 Jakarta Contexts 및 Dependency Injection Bean으로 관리할 수 없습니다. 엔터티에 @Vetoed 주석이 추가되면 주입이 수행되지 않습니다. 이를 뒷받침하는 이유는 BeanManager 가 Jakarta Persistence 공급자가 중단될 수 있는 작업을 수행하지 못하도록 하기 때문입니다.