jakarta.faces.bean.ManagedBean Maven / Gradle / Ivy
/*
* Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package jakarta.faces.bean;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*
* The presence of this annotation on a class automatically registers the class with the runtime as a managed bean
* class. Classes must be scanned for the presence of this annotation at application startup, before any requests have
* been serviced.
*
*
*
*
*
* The value of the {@link #name} attribute is taken to be the managed-bean-name. If the value of the
* name attribute is unspecified or is the empty String
, the managed-bean-name is derived
* from taking the unqualified class name portion of the fully qualified class name and converting the first character
* to lower case. For example, if the ManagedBean
annotation is on a class with the fully qualified class
* name com.foo.Bean
, and there is no name attribute on the annotation, the
* managed-bean-name is taken to be bean
. The fully qualified class name of the class to which
* this annotation is attached is taken to be the managed-bean-class.
*
*
*
* The scope of the managed bean is declared using one of {@link NoneScoped}, {@link RequestScoped}, {@link ViewScoped},
* {@link SessionScoped}, {@link ApplicationScoped}, or {@link CustomScoped} annotations. If the scope annotations are
* omitted, the bean must be handled as if the {@link RequestScoped} annotation is present.
*
*
*
* If the value of the {@link #eager} attribute is true
, and the managed-bean-scope
value is
* "application", the runtime must instantiate this class when the application starts. This instantiation and storing of
* the instance must happen before any requests are serviced. If eager is unspecified or false
, or
* the managed-bean-scope
is something other than "application", the default "lazy" instantiation and
* scoped storage of the managed bean happens.
*
*
*
* When the runtime processes this annotation, if a managed bean exists whose name is equal to the derived
* managed-bean-name, a FacesException
must be thrown and the application must not be placed in
* service.
*
*
*
* A class tagged with this annotation must have a public zero-argument constructor. If such a constructor is not
* defined on the class, a FacesException
must be thrown and the application must not be placed in service.
*
*
*
*
* @since 2.0
* @deprecated This has been replaced by the Managed Beans specification in general and specifically the dependency
* injection, scopes and naming from the CDI specification. Note that the eager attribute for application
* scoped beans is replaced specifically by observing the {@code jakarta.enterprise.context.Initialized} event for
* {@code jakarta.enterprise.context.ApplicationScoped}. See 6.7.3 of the CDI spec for further details.
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
@Deprecated
public @interface ManagedBean {
/**
*
* Taken to be the managed-bean-name
. See class documentation for details.
*
*
* @return the managed bean name.
*/
String name() default "";
/**
*
* Taken to be the value of the eager
attribute of the managed-bean
. See class documentation
* for details.
*
*
* @return the eager attribute of the managed bean.
*/
boolean eager() default false;
}