//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package org.springframework.aop.framework;
import org.springframework.core.NamedThreadLocal;
public abstract class AopContext {
private static final ThreadLocal<Object> currentProxy = new NamedThreadLocal("Current AOP proxy");
public AopContext() {
}
public static Object currentProxy() throws IllegalStateException {
Object proxy = currentProxy.get();
if (proxy == null) {
throw new IllegalStateException("Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to make it available.");
} else {
return proxy;
}
}
static Object setCurrentProxy(Object proxy) {
Object old = currentProxy.get();
if (proxy != null) {
currentProxy.set(proxy);
} else {
currentProxy.remove();
}
return old;
}
}
需要进行内部调用的实例,直接通过调用self().xxMethord()就可以事务生效
public interface ProxySelf<T> {
/**
* 取得当前对象的代理.
*
* @return 代理对象,如果未被代理,则抛出 IllegalStateException
*/
@SuppressWarnings("unchecked")
default T self() {
return (T) AopContext.currentProxy();
}
}