/*
* Copyright 2002-2017 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
*
* 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.springframework.transaction.interceptor;
import org.aopalliance.aop.Advice;
import org.springframework.aop.ClassFilter;
import org.springframework.aop.Pointcut;
import org.springframework.aop.support.AbstractPointcutAdvisor;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
Advisor driven by a TransactionAttributeSource
, used to include a TransactionInterceptor
only for methods that are transactional. Because the AOP framework caches advice calculations, this is normally
faster than just letting the TransactionInterceptor run and find out
itself that it has no work to do.
Author: Rod Johnson, Juergen Hoeller See Also:
/**
* Advisor driven by a {@link TransactionAttributeSource}, used to include
* a {@link TransactionInterceptor} only for methods that are transactional.
*
* <p>Because the AOP framework caches advice calculations, this is normally
* faster than just letting the TransactionInterceptor run and find out
* itself that it has no work to do.
*
* @author Rod Johnson
* @author Juergen Hoeller
* @see #setTransactionInterceptor
* @see TransactionProxyFactoryBean
*/
@SuppressWarnings("serial")
public class TransactionAttributeSourceAdvisor extends AbstractPointcutAdvisor {
@Nullable
private TransactionInterceptor transactionInterceptor;
private final TransactionAttributeSourcePointcut pointcut = new TransactionAttributeSourcePointcut() {
@Override
@Nullable
protected TransactionAttributeSource getTransactionAttributeSource() {
return (transactionInterceptor != null ? transactionInterceptor.getTransactionAttributeSource() : null);
}
};
Create a new TransactionAttributeSourceAdvisor.
/**
* Create a new TransactionAttributeSourceAdvisor.
*/
public TransactionAttributeSourceAdvisor() {
}
Create a new TransactionAttributeSourceAdvisor.
Params: - interceptor – the transaction interceptor to use for this advisor
/**
* Create a new TransactionAttributeSourceAdvisor.
* @param interceptor the transaction interceptor to use for this advisor
*/
public TransactionAttributeSourceAdvisor(TransactionInterceptor interceptor) {
setTransactionInterceptor(interceptor);
}
Set the transaction interceptor to use for this advisor.
/**
* Set the transaction interceptor to use for this advisor.
*/
public void setTransactionInterceptor(TransactionInterceptor interceptor) {
this.transactionInterceptor = interceptor;
}
Set the ClassFilter
to use for this pointcut. Default is ClassFilter.TRUE
. /**
* Set the {@link ClassFilter} to use for this pointcut.
* Default is {@link ClassFilter#TRUE}.
*/
public void setClassFilter(ClassFilter classFilter) {
this.pointcut.setClassFilter(classFilter);
}
@Override
public Advice getAdvice() {
Assert.state(this.transactionInterceptor != null, "No TransactionInterceptor set");
return this.transactionInterceptor;
}
@Override
public Pointcut getPointcut() {
return this.pointcut;
}
}