InterceptorBinding.java revision afa4b5dd2056a8427657186d1804313c3f34fbfe
1477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit/** 2477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * Copyright (C) 2008 Google Inc. 3477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * 4477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * Licensed under the Apache License, Version 2.0 (the "License"); 5477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * you may not use this file except in compliance with the License. 6477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * You may obtain a copy of the License at 7477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * 8477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * http://www.apache.org/licenses/LICENSE-2.0 9477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * 10477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * Unless required by applicable law or agreed to in writing, software 11477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * distributed under the License is distributed on an "AS IS" BASIS, 12477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * See the License for the specific language governing permissions and 14477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * limitations under the License. 15477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit */ 16477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit 17477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkitpackage com.google.inject.spi; 18477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit 19477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkitimport static com.google.common.base.Preconditions.checkNotNull; 20477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkitimport com.google.inject.matcher.Matcher; 21477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkitimport java.lang.reflect.Method; 22477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkitimport java.util.Arrays; 23477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkitimport static java.util.Collections.unmodifiableList; 24477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkitimport java.util.List; 25477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkitimport org.aopalliance.intercept.MethodInterceptor; 26477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit 27477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit/** 2800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * Registration of interceptors for matching methods of matching classes. Instances are created 2900ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * explicitly in a module using {@link com.google.inject.Binder#bindInterceptor( 3000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * Matcher, Matcher, MethodInterceptor[]) bindInterceptor()} statements: 3100ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * <pre> 3200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * bindInterceptor(Matchers.subclassesOf(MyAction.class), 3300ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * Matchers.annotatedWith(Transactional.class), 3400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * new MyTransactionInterceptor());</pre> 35477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * 36477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit * @author jessewilson@google.com (Jesse Wilson) 37477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit */ 3800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitpublic final class InterceptorBinding implements Element { 39477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit private final Object source; 40477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit private final Matcher<? super Class<?>> classMatcher; 41477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit private final Matcher<? super Method> methodMatcher; 42477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit private final List<MethodInterceptor> interceptors; 43477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit 4400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit InterceptorBinding( 45477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit Object source, 46477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit Matcher<? super Class<?>> classMatcher, 47477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit Matcher<? super Method> methodMatcher, 48477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit MethodInterceptor[] interceptors) { 49477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit this.source = checkNotNull(source, "source"); 50477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit this.classMatcher = checkNotNull(classMatcher, "classMatcher"); 51477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit this.methodMatcher = checkNotNull(methodMatcher, "methodMatcher"); 52477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit this.interceptors = unmodifiableList(Arrays.asList(interceptors.clone())); 53477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit } 54477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit 55477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit public Object getSource() { 56477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit return source; 57477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit } 58477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit 59477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit public Matcher<? super Class<?>> getClassMatcher() { 60477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit return classMatcher; 61477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit } 62477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit 63477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit public Matcher<? super Method> getMethodMatcher() { 64477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit return methodMatcher; 65477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit } 66477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit 67477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit public List<MethodInterceptor> getInterceptors() { 68477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit return interceptors; 69477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit } 70477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit 71afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkit public <T> T acceptVisitor(ElementVisitor<T> visitor) { 7200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit return visitor.visitInterceptorBinding(this); 73477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit } 74477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit} 75