JDK动态代理必须依赖接口(必须有接口)
public interface GoodsDao {
public void save();
public void update();
}
接口实现类:
public class GoodsDaoImpl implements GoodsDao {
@Override
public void save() {
System.out.println("保存操作");
}
@Override
public void update() {
System.out.println("更新操作");
}
}
JDK动态代理类:
public class GoodsJDKProxy {
public GoodsDao createProxy(GoodsDao goodsDao){
// 增强功能
GoodsDao goodsDaoProxy = (GoodsDao)Proxy.newProxyInstance(goodsDao.getClass().getClassLoader(), goodsDao.getClass().getInterfaces(),
new InvocationHandler() {
// 当调用对象的时候,所有的方法都会来到这里
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if ("save".equals(method.getName())){
System.out.println("权限检验");
GoodsDao goodsDao1 = (GoodsDao)method.invoke(goodsDao, args);
System.out.println("退出");
return goodsDao1;
}
return method.invoke(goodsDao, args);
}
});
return goodsDaoProxy;
}
}
测试:
@Test
public void test() {
GoodsDao goodsDao = new GoodsDaoImpl();
// goodsDao.save();
GoodsJDKProxy goodsJDKProxy = new GoodsJDKProxy();
GoodsDao proxy = goodsJDKProxy.createProxy(goodsDao);
proxy.save();
proxy.update();
}
原文:https://www.cnblogs.com/xzh0717/p/10847528.html