package aop_jdk;
public interface Dao {
public void save();
public void update();
}
package aop_jdk;
public class DaoImpl implements Dao {
@Override
public void save() {
System.out.println("保存。。");
}
@Override
public void update() {
System.out.println("更新。。");
}
}
package aop_jdk;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* 基于jdk的动态代理
* @author
*
*/
public class ProxyUtils {
public static <T> T getDao(T dao){
@SuppressWarnings("unchecked")
T proxy = (T)Proxy.newProxyInstance(dao.getClass().getClassLoader(), dao.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object arg0, Method method, Object[] args) throws Throwable {
if(method.getName().contains("save")||method.getName().contains("update")||method.getName().contains("delete")){
System.out.println("打开事务");
}
// 执行原方法
method.invoke(dao, args);
if(method.getName().contains("save")||method.getName().contains("update")||method.getName().contains("delete")){
System.out.println("关闭事务");
}
return null;
}
});
return proxy;
}
}
package aop_jdk;
import org.junit.Test;
/**
* jdk的动态代理
* @author
*
*/
public class TestAopjdk {
@Test
public void testjdk(){
Dao dao = new DaoImpl();
dao.save();
dao.update();
System.out.println("============");
// 获得代理对象
Dao proxy = ProxyUtils.getDao(dao);
proxy.save();
proxy.update();
}
}
输出:
保存。。
更新。。
============
打开事务
保存。。
关闭事务
打开事务
更新。。
关闭事务