001 // Copyright 2007, 2009, 2011 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package org.apache.tapestry5.ioc; 016 017 import org.apache.tapestry5.ioc.annotations.EagerLoad; 018 import org.apache.tapestry5.ioc.annotations.Scope; 019 020 import java.lang.annotation.Annotation; 021 022 /** 023 * Allows additional options for a service to be specified, overriding hard coded defaults or defaults from annotations 024 * on the service. 025 * 026 * @see org.apache.tapestry5.ioc.def.ServiceDef2 027 */ 028 public interface ServiceBindingOptions 029 { 030 /** 031 * Allows a specific service id for the service to be provided, rather than the default (from the service 032 * interface). This is useful when multiple services implement the same interface, since service ids must be 033 * unique. 034 * 035 * @param id 036 * @return this binding options, for further configuration 037 */ 038 ServiceBindingOptions withId(String id); 039 040 /** 041 * Uses the the simple (unqualified) class name of the implementation class as the id of the service. 042 * 043 * @return this binding options, for further configuration 044 * @throws IllegalStateException if the class name was not defined (via {@link ServiceBinder#bind(Class, Class)} or 045 * {@link ServiceBinder#bind(Class)}). 046 * @since 5.3 047 */ 048 ServiceBindingOptions withSimpleId(); 049 050 /** 051 * Sets the scope of the service, overriding the {@link Scope} annotation on the service implementation class. 052 * 053 * @param scope 054 * @return this binding options, for further configuration 055 * @see org.apache.tapestry5.ioc.ScopeConstants 056 */ 057 ServiceBindingOptions scope(String scope); 058 059 /** 060 * Turns eager loading on for this service. This may also be accomplished using the {@link EagerLoad} annotation on 061 * the service implementation class. 062 * 063 * @return this binding options, for further configuration 064 */ 065 ServiceBindingOptions eagerLoad(); 066 067 /** 068 * Disallows service decoration for this service. 069 * 070 * @return this binding options, for further configuration 071 */ 072 ServiceBindingOptions preventDecoration(); 073 074 /** 075 * Identifies a service for which live class reloading is not desired. This primarily applies to certain 076 * internal Tapestry services, and is necessary during the development of Tapestry itself. In user applications, 077 * services defined in library modules are not subject to reloading because the class files are stored in JARs, not 078 * as local file system files. 079 * 080 * @since 5.2.0 081 */ 082 ServiceBindingOptions preventReloading(); 083 084 /** 085 * Defines the marker interface(s) for the service, used to connect injections by type at the point of injection 086 * with a particular service implementation, based on the intersection of type and marker interface. The containing 087 * module will sometimes provide a set of default marker annotations for all services within the module, this method 088 * allows that default to be extended. 089 * 090 * @param <T> 091 * @param marker one or more markers to add 092 * @return this binding options, for further configuration 093 */ 094 <T extends Annotation> ServiceBindingOptions withMarker(Class<T>... marker); 095 }