/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.felix.scr.annotations; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * The <code>Reference</code> annotation defines references to other services * made available to the component by the Service Component Runtime. * <p> * This annotation may be declared for a Java Class or any Java Field to which * it might apply. Depending on where the annotation is declared, the parameters * may have different default values. * <p> * This annotation is used to declare <reference> elements of the * component declaration. See section 112.4.7, Reference Element, in the OSGi * Service Platform Service Compendium Specification for more information. * @deprecated Use the OSGi annotations from org.osgi.service.component.annotations.* */ @Target( { ElementType.TYPE, ElementType.FIELD }) @Retention(RetentionPolicy.CLASS) @Documented @Deprecated public @interface Reference { /** * The local name of the reference. If the annotation is declared on class * level, this parameter is required. If the tag is declared for a field, * the default value for the name parameter is the name of the field. */ String name() default ""; /** * The name of the service interface. This name is used by the Service * Component Runtime to access the service on behalf of the component. If * the annotation is declared on class level, this parameter is required. If * the annotation is declared for a field, the default value for the * interface parameter is the type of the field. */ Class<?> referenceInterface() default AutoDetect.class; /** * The cardinality of the service reference. This must be one of 0..1, 1..1, * 0..n, and 1..n. */ ReferenceCardinality cardinality() default ReferenceCardinality.MANDATORY_UNARY; /** * The dynamicity policy of the reference. If dynamic the service will be * made available to the component as it comes and goes. If static the * component will be deactivated and re-activated if the service comes * and/or goes away. */ ReferencePolicy policy() default ReferencePolicy.STATIC; /** * The policy option for the reference * @since 1.7 */ ReferencePolicyOption policyOption() default ReferencePolicyOption.RELUCTANT; /** * A service target filter to select specific services to be made available. * In order to be able to overwrite the value of this value by a * configuration property, this parameter must be declared. If the parameter * is not declared, the respective declaration attribute will not be * generated. */ String target() default ""; /** * The name of the method to be called when the service is to be bound to * the component. The default value is the name created by appending the * reference name to the string bind. The method must be declared * <code>public</code> or <code>protected</code> and take single argument * which is declared with the service interface type. */ String bind() default ""; /** * The name of the method to be called when the service is to be unbound * from the component. The default value is the name created by appending * the reference name to the string unbind. The method must be declared * <code>public</code> or <code>protected</code> and take single argument * which is declared with the service interface type. */ String unbind() default ""; /** * The name of the method to be called when the bound service updates its * service registration properties. By default this is not set. */ String updated() default ""; /** * The reference strategy for the reference. This can either be * {@link ReferenceStrategy#EVENT} in which case the bind and unbind * methods are used or it can be {@link ReferenceStrategy#LOOKUP} * in which case the reference is looked up through the * component context. */ ReferenceStrategy strategy() default ReferenceStrategy.EVENT; }