动态代理设计模式
2019-04-24 / JAVA / 1211 次围观 / 0 次吐槽 /动态代理概述
1.代理:本来应该自己做的事情,请了别人来做,被请的人就是代理对象。
举例:春节回家买票让人代买
2.在Java中java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口
3.通过使用这个类和接口就可以生成动态代理对象。
4.JDK提供的代理只能针对接口做代理。我们有更强大的代理cglib
5.Proxy 通过 newProxyInstance(loader,interfaces,h)创建代理对象
5.InvocationHandler的invoke(proxy,method, args)方法会拦截方法的调用
案例代码
public class D1 {
public static void main(String[] args) {
//创建对象
UserServerIMPI usimpi = new UserServerIMPI();
//创建代理对象
UserServer proxy =(UserServer) Proxy.newProxyInstance(usimpi.getClass().getClassLoader(),
usimpi.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("方法调用前");
//拦截了方法
Object returnObj = method.invoke(usimpi, args);
System.out.println("方法调用后");
return returnObj;
}
});
proxy.login();
proxy.delUser();
}
}
interface UserServer{
public abstract void login();
public abstract void delUser();
}
class UserServerIMPI implements UserServer{
@Override
public void login() {
System.out.println("用户登陆");
}
@Override
public void delUser() {
System.out.println("删除用户");
}
}- 上一篇:反射
- 下一篇:模版(Template)设计模式
Powered By Cheug's Blog
Copyright Cheug Rights Reserved.