JDK动态代理
public class MyJdkProxy implements InvocationHandler {
private UserDao userDao;
public MyJdkProxy(UserDao userDao) {
this.userDao=userDao;
}
public Object ceateProxy(){
// ClassLoader loader ----指定被代理对象的类加载器
// Class[] Interfaces ----指定被代理对象所有实现的接口
// InvocationHandler h ----指定关联的调用处理器InvocationHandler对象
Object proxy= Proxy.newProxyInstance(userDao.getClass().getClassLoader(),userDao.getClass().getInterfaces(),this);
return proxy;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if ("save".equals(method.getName())) {
System.out.println("权限校验");
return method.invoke(userDao,args);
}
return method.invoke(userDao,args);
}
}
测试
@Test
public void demo1(){
UserDao userDao=new UserDaoImpl();
UserDao proxy=(UserDao)new MyJdkProxy(userDao).ceateProxy();
proxy.save();
}
public class MyCglibProxy implements MethodInterceptor {
private ProductDao productDao;
public MyCglibProxy(ProductDao productDao) {
this.productDao = productDao;
}
public Object createProxy(){
// 1.创建核心类
Enhancer enhancer=new Enhancer();
// 2.设置父类
enhancer.setSuperclass(productDao.getClass());
// 3.设置回调
enhancer.setCallback(this);
// 4.生成代理
Object proxy=enhancer.create();
return proxy;
}
@Override
public Object intercept(Object proxy, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
if ("save".equals(method.getName())) {
System.out.println("权限校验======");
return methodProxy.invokeSuper(proxy,objects);
}
return methodProxy.invokeSuper(proxy,objects);
}
}
测试
@Test
public void demo1(){
ProductDao productDao=new ProductDao();
ProductDao proxy=(ProductDao) new MyCglibProxy(productDao).createProxy();
proxy.delete();
}