01: // Copyright 2007 The Apache Software Foundation
02: //
03: // Licensed under the Apache License, Version 2.0 (the "License");
04: // you may not use this file except in compliance with the License.
05: // You may obtain a copy of the License at
06: //
07: // http://www.apache.org/licenses/LICENSE-2.0
08: //
09: // Unless required by applicable law or agreed to in writing, software
10: // distributed under the License is distributed on an "AS IS" BASIS,
11: // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12: // See the License for the specific language governing permissions and
13: // limitations under the License.
14:
15: package org.apache.tapestry.internal.services;
16:
17: import org.apache.tapestry.annotations.Service;
18: import org.apache.tapestry.ioc.AnnotationProvider;
19: import org.apache.tapestry.ioc.ObjectLocator;
20: import org.apache.tapestry.ioc.ObjectProvider;
21:
22: /**
23: * Adds support for the {@link Service} annotation (which can be applied to fields or parameters),
24: * which is used to disambiguate injection when multiple services implement the same service
25: * interface.
26: */
27: public class ServiceAnnotationObjectProvider implements ObjectProvider {
28: public <T> T provide(Class<T> objectType,
29: AnnotationProvider annotationProvider, ObjectLocator locator) {
30: Service annotation = annotationProvider
31: .getAnnotation(Service.class);
32:
33: if (annotation == null)
34: return null;
35:
36: return locator.getService(annotation.value(), objectType);
37: }
38:
39: }
|