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

org.glassfish.hk2.api.Descriptor Maven / Gradle / Ivy

There is a newer version: 8.16.0
Show newest version
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
 *
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common Development
 * and Distribution License("CDDL") (collectively, the "License").  You
 * may not use this file except in compliance with the License.  You can
 * obtain a copy of the License at
 * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
 * or packager/legal/LICENSE.txt.  See the License for the specific
 * language governing permissions and limitations under the License.
 *
 * When distributing the software, include this License Header Notice in each
 * file and include the License file at packager/legal/LICENSE.txt.
 *
 * GPL Classpath Exception:
 * Oracle designates this particular file as subject to the "Classpath"
 * exception as provided by Oracle in the GPL Version 2 section of the License
 * file that accompanied this code.
 *
 * Modifications:
 * If applicable, add the following below the License Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * "Portions Copyright [year] [name of copyright owner]"
 *
 * Contributor(s):
 * If you wish your version of this file to be governed by only the CDDL or
 * only the GPL Version 2, indicate your decision by adding "[Contributor]
 * elects to include this software in this distribution under the [CDDL or GPL
 * Version 2] license."  If you don't indicate a single choice of license, a
 * recipient has the option to distribute your version of this file under
 * either the CDDL, the GPL Version 2 or to extend the choice of license to
 * its licensees as provided above.  However, if you add GPL Version 2 code
 * and therefore, elected the GPL Version 2 license, then the option applies
 * only if the new code is made subject to such option by the copyright
 * holder.
 */
package org.glassfish.hk2.api;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * A Descriptor is a bean-like structure that describes a service
 * declaration in HK2.  A descriptor is comprised only of basic
 * objects such as String or boolean (e.g., not Class or Annotation}.
 * A described service does not need to be classloaded in order to
 * have a Descriptor.  However, this does imply that a Descriptor will
 * have some loss of information when compared to a classloaded service,
 * which is described with an {@link ActiveDescriptor}.  For example, a
 * Descriptor can know that a service has a qualifier named Foo, but
 * will not know (without the use of {@link Metadata}) what values
 * Foo contains.
 * 

* Services have a number of optional attributes such as name and scope. * A service is required to minimally have a type name representing the * concrete (i.e., byType) definition. *

* @see ActiveDescriptor Metadata * * @author Jerome Dochez, Jeff Trent, Mason Taube */ public interface Descriptor { /** * Returns the fully qualified class * name of the implementation * class. If this is a factory descriptor * then this will return the fully * qualified name of the class implementing * the factory interface. * * @return Might return null in some cases, * but will usually return the fully qualified * class name of the implementation class or * of the factory class for this descriptor */ public String getImplementation(); /** * Returns the base class name of the contracts that * this service describes. If the contract is a * paramterized type this will return the raw class. * If this service can be looked up by its implementation * class then the name of the implementation class * must also be found in this list * * @return Will never return null, but * may return an empty set. The returned * strings are the fully qualified class * names of contracts the predicate * describes */ public Set getAdvertisedContracts(); /** * Returns the fully qualified class name of * the scope annotation that should be * associated with this descriptor. * * @return If this returns null then this * descriptor is assumed to be in the * default scope, which is PerLookup */ public String getScope(); /** * The name of this descriptor. Note that * if this returns not null then there must * also be the Named qualifier in the set of * qualifiers with the same value *

* * @return The name of this descriptor, or null * if there is no name associated with this qualifier */ public String getName(); /** * Returns all of the annotation classes * that this object should be registered * with or looked up by * * @return Never returns null, but may return * an empty set. The set of fully * qualified class names that are annotations * that this object must have */ public Set getQualifiers(); /** * Returns CLASS if this is a class descriptor * and FACTORY if this is a descriptor describing * a factory for a type, in which case the * implClass should point to the implementation * class of the factory * * @return Either CLASS or FACTORY */ public DescriptorType getDescriptorType(); /** * Returns the visibility of this descriptor. *

* If the visibility is NORMAL then this descriptor * may be seen by all children locators of the * locator in which this descriptor is bound *

* If the visibility is LOCAL then this descriptor * may only be seen by the servcie locator in which * it is bound, and in none of the children * of that locator * * @return Either NORMAL or LOCAL */ public DescriptorVisibility getDescriptorVisibility(); /** * Returns all of the metadata associated * that this object should be registered * with or looked up by * * @return Never returns null, but may return * an empty set. The set of metadata * associated with the object. The values * in the returned map will never be null, and * will always have at least one member */ public Map> getMetadata(); /** * This returns the loader that should be used when * classloading this descriptor. If this method * returns null then the class will be loaded with the * classloader of the Injectee if there is one, or * with the classloader that loaded HK2 itself; failing * that the context class loader on the thread * will be tried. * * @return An HK2Loader that can be used to load * this descriptor, or null if the default classloading * algorithm should be used */ public HK2Loader getLoader(); /** * Returns the ranking of this descriptor. Rankings * with higher value will be considered "better" than * rankings of lower value. Descriptors with the same * ranking will be returned in the reverse ServiceID order * (in other words, the least service ID is considered * "better" than any higher service ID). * * @return the ranking that should be associated with this * descriptor */ public int getRanking(); /** * Returns the ranking of this descriptor. Rankings * with higher value will be considered "better" than * rankings of lower value. Descriptors with the same * ranking will be returned in the reverse ServiceID order * (in other words, the least service ID is considered * "better" than any higher service ID). *

* The ranking of a service may change at any time during * the life of the descriptor * * @param ranking The new ranking this descriptor should have * @return the previous ranking that this descriptor had */ public int setRanking(int ranking); /** * If this returns true then the system will create a proxy for * instances of this descriptor. As with all proxies, the proxy * created will also implement the {@link ProxyCtl} interface *

* It is an error for this method to return true if the scope that * this descriptor is in is {@link Unproxiable} (such as PerLookup). * * @return true if this descriptor must be proxied, false if this * descriptor must NOT be proxied (even if it is in an Unproxiable scope) * and null if this descriptor should take its proxiable status from * the scope it is in (i.e., it will only be proxied if the scope is * marked {@linke Proxiable}) */ public Boolean isProxiable(); /** * This value determines whether or not this service should be * proxied when being injected into other services of the same * scope. If a scope is proxiable then it will have a default * setting for whether or not its services should be proxied * when being injected into the same scope. If this method * returns null then the default setting for the scope will * be used. Otherwise the value returned will determine * whether or not this service will be proxied when being * injected into a service of the same scope. * * @return null if this descriptor should use the default * ProxyForSameScope value for the scope. If it returns * true then this service will be proxied even when * being injected into the same scope. If it returns * false then this service will NOT be proxied when * being injected into the same scope (i.e., it cannot * be used for lazy initialization of the service when * injected into the same scope) */ public Boolean isProxyForSameScope(); /** * Returns the name of the {@link ClassAnalyzer} service that * should be used to discover the constructors, initialization methods, * field and postConstruct and preDestory methods. If null the default * implementation will be used. Will be ignored for descriptors that * are not automatically analyzed by hk2 * * @return the possibly null name of the ClassAnalysis service that * should be used to analyze the class represented by this descriptor. * If null then the HK2 default analysis will be performed */ public String getClassAnalysisName(); /** * This returns the unique identifier for this descriptor. * This field will be ignored upon binding, and will then * be assigned by the system. However, this field can be * set on search operations, in which case this search will * match exactly one Provider in the system. * * @return The service id for this object. Note that this * field may return null if this is an initial bind, as it * is not the responsibility of the binder to set this * value. If this returns non-null on a bind operation the * return value will be ignored */ public Long getServiceId(); /** * This returns the id of the ServiceLocator which this descriptor * is registered with. Returns null if this descriptor * is not yet registered with a ServiceLocator * * @return The id of the ServiceLocator this Descriptor is registered * with, or null if this Descriptor is not registered with a ServiceLocator */ public Long getLocatorId(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy