package cn.itcast.proxy;
public interface UserDao {
void save();
void update();
}
package cn.itcast.proxy;
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("保存用户了");
}
@Override
public void update() {
System.out.println("更新用户了");
}
}
package cn.itcast.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class UserDaoProxyUtils {
public static UserDao getProxy(final UserDao userDao){
UserDao proxy = (UserDao) Proxy.newProxyInstance(userDao.getClass().getClassLoader(), userDao.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if("save".equals(method.getName())){
System.out.println("开启事务");
}
Object invoke = method.invoke(userDao, args);
if("save".equals(method.getName())){
System.out.println("关闭事务");
}
return invoke;
}
});
return proxy;
}
}
package cn.itcast.proxy;
public class UserDaoProxyTest {
public static void main(String[] args) {
UserDao userDao = new UserDaoImpl();
userDao.save();
userDao.update();
System.out.println(".......................");
UserDao proxy = UserDaoProxyUtils.getProxy(userDao);
proxy.save();
proxy.update();
}
}
![这里写图片描述](https://img-blog.csdn.net/20171029101040348?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbTBfMzc1NzI0NTg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)