All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jakarta.enterprise.context.Dependent Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2010, Red Hat, Inc., and individual contributors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package jakarta.enterprise.context;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import jakarta.enterprise.context.spi.Context;
import jakarta.enterprise.context.spi.Contextual;
import jakarta.enterprise.context.spi.CreationalContext;
import jakarta.enterprise.inject.Instance;
import jakarta.enterprise.util.AnnotationLiteral;
import jakarta.inject.Scope;

/**
 * 

* Specifies that a bean belongs to the dependent pseudo-scope. *

* *

* Beans declared with scope @Dependent behave differently to beans with other built-in scope types. When a bean is * declared to have scope @Dependent: *

* *
    *
  • No injected instance of the bean is ever shared between multiple injection points.
  • *
  • Any instance of the bean injected into an object that is being created by the container is bound to the lifecycle of the * newly created object.
  • *
  • When a Unified EL expression in a JSF or JSP page that refers to the bean by its EL name is evaluated, at most one * instance of the bean is instantiated. This instance exists to service just a single evaluation of the EL expression. It is * reused if the bean EL name appears multiple times in the EL expression, but is never reused when the EL expression is * evaluated again, or when another EL expression is evaluated.
  • *
  • Any instance of the bean that receives a producer method, producer field, disposer method or observer method invocation * exists to service that invocation only.
  • *
  • Any instance of the bean injected into method parameters of a disposer method or observer method exists to service the * method invocation only.
  • *
* *

* Every invocation of the {@link Context#get(Contextual, CreationalContext)} operation of the context object for the * @Dependent scope returns a new instance of the given bean. *

* *

* Every invocation of the {@link Context#get(Contextual)} operation of the context object for the @Dependent scope * returns a null value. *

* *

* The @Dependent scope is always active. *

* *

* Many instances of beans with scope @Dependent belong to some other bean or Java EE component class instance and * are called dependent objects. *

* *
    *
  • Instances of decorators and interceptors are dependent objects of the bean instance they decorate.
  • *
  • An instance of a bean with scope @Dependent injected into a field, bean constructor or initializer method is * a dependent object of the bean or Java EE component class instance into which it was injected.
  • *
  • An instance of a bean with scope @Dependent injected into a producer method is a dependent object of the * producer method bean instance that is being produced.
  • *
  • An instance of a bean with scope @Dependent obtained by direct invocation of an {@link Instance} is a * dependent object of the instance of {@link Instance}.
  • *
* *

* When the container destroys an instance of a bean or of any Java EE component class supporting injection, the container * destroys all its dependent objects, after the @PreDestroy callback completes and after the servlet * destroy() method is called. *

* * @author Gavin King * @author Pete Muir */ @Target({ METHOD, TYPE, FIELD }) @Retention(RUNTIME) @Documented @Scope @Inherited public @interface Dependent { /** * Supports inline instantiation of the {@link Dependent} annotation. * * @author Martin Kouba * @since 2.0 */ public final static class Literal extends AnnotationLiteral implements Dependent { /** Default Dependent literal */ public static final Literal INSTANCE = new Literal(); private static final long serialVersionUID = 1L; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy