/*
 * Copyright 2002-2019 the original author or authors.
 *
 * Licensed 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
 *
 *      https://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.springframework.transaction.interceptor;

import java.lang.reflect.Method;

import org.springframework.lang.Nullable;

Strategy interface used by TransactionInterceptor for metadata retrieval.

Implementations know how to source transaction attributes, whether from configuration, metadata attributes at source level (such as Java 5 annotations), or anywhere else.

Author:Rod Johnson, Juergen Hoeller
See Also:
Since:15.04.2003
/** * Strategy interface used by {@link TransactionInterceptor} for metadata retrieval. * * <p>Implementations know how to source transaction attributes, whether from configuration, * metadata attributes at source level (such as Java 5 annotations), or anywhere else. * * @author Rod Johnson * @author Juergen Hoeller * @since 15.04.2003 * @see TransactionInterceptor#setTransactionAttributeSource * @see TransactionProxyFactoryBean#setTransactionAttributeSource * @see org.springframework.transaction.annotation.AnnotationTransactionAttributeSource */
public interface TransactionAttributeSource {
Determine whether the given class is a candidate for transaction attributes in the metadata format of this TransactionAttributeSource.

If this method returns false, the methods on the given class will not get traversed for getTransactionAttribute introspection. Returning false is therefore an optimization for non-affected classes, whereas true simply means that the class needs to get fully introspected for each method on the given class individually.

Params:
  • targetClass – the class to introspect
Returns:false if the class is known to have no transaction attributes at class or method level; true otherwise. The default implementation returns true, leading to regular introspection.
Since:5.2
/** * Determine whether the given class is a candidate for transaction attributes * in the metadata format of this {@code TransactionAttributeSource}. * <p>If this method returns {@code false}, the methods on the given class * will not get traversed for {@link #getTransactionAttribute} introspection. * Returning {@code false} is therefore an optimization for non-affected * classes, whereas {@code true} simply means that the class needs to get * fully introspected for each method on the given class individually. * @param targetClass the class to introspect * @return {@code false} if the class is known to have no transaction * attributes at class or method level; {@code true} otherwise. The default * implementation returns {@code true}, leading to regular introspection. * @since 5.2 */
default boolean isCandidateClass(Class<?> targetClass) { return true; }
Return the transaction attribute for the given method, or null if the method is non-transactional.
Params:
  • method – the method to introspect
  • targetClass – the target class (may be null, in which case the declaring class of the method must be used)
Returns:the matching transaction attribute, or null if none found
/** * Return the transaction attribute for the given method, * or {@code null} if the method is non-transactional. * @param method the method to introspect * @param targetClass the target class (may be {@code null}, * in which case the declaring class of the method must be used) * @return the matching transaction attribute, or {@code null} if none found */
@Nullable TransactionAttribute getTransactionAttribute(Method method, @Nullable Class<?> targetClass); }