发表于: 2017-09-26 18:05:17

2 785


今天完成的事情:

学习了静态代理和动态代理,静态代理和动态代理都存在一定的缺陷,可以用spring AOP代替动态代理。

静态代理代码:

//接口

public interface Subject {

public void doSomething();

//实现接口的业务层(好像是这么说的)自己理解就是这个层级主要实现主要功能,产品上线之后不可以随便修改。

public class RealSubject implements Subject {

@Override

public void doSomething() {

System.out.println("call doSomething()");

}

}

//实现接口的代理层,这一层对于真实类的封装具有重大意义,而且后期可以扩展功能。

public class SubjectProxy implements Subject {

Subject subimpl = new RealSubject();

@Override

public void doSomething() {

subimpl.doSomething();

}

}

//测试

public class TestProxy {

public static void main(String[] args) {

Subject sub=new SubjectProxy();

sub.doSomething();

}

}

动态代理:

//接口

public interface Subject {

public void doSomething();

//实现接口的业务层(真实类)。

public class RealSubject implements Subject {

@Override

public void doSomething() {

System.out.println("call doSomething()");

}

}

//动态代理

public class ProxyHandler implements InvocationHandler {

private Object tar;

public Object bind(Object tar) {

this.tar=tar;

return Proxy.newProxyInstance(tar.getClass().getClassLoader(),

tar.getClass().getInterfaces(), this);

}

@Override

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

Object result =null;

result=method.invoke(tar, args);

return result;

}

}

//测试

public class TestProxy {

public static void main(String[] args) {

ProxyHandler proxy=new ProxyHandler();

Subject sub=(Subject) proxy.bind(new RealSubject());

sub.doSomething();

}

}

静态类总结:对于真实类的封装以及对于粒度的控制有着重要的意义,但是静态代理这个模式本身有个大问题,如果类方法数量越来越多的时候,代理类的代码太多。

动态类总结:proxy类的代码量被固定下来,不会因为业务的逐渐庞大而庞大。

明天计划的事情:

学习今天这些java的代理,是准备明天学习spring aop代替java代理。

遇到的困难:

静态代理还好理解,动态代理就比较难理解了。这个问题还得自己解决,要自己吃透这一块,最起码能自己写出来,知道为什么这么写。

收获:

了解了静态代理和动态代理。今天自己的审核通过了,心情也比较好,接下来要好好准备接受3个月的魔鬼训练,争取明年找个自己满意的工作。多谢师兄这几天审批我的日报,下次去上海,请师兄吃炸鸡,喝啤酒。



返回列表 返回列表
评论

    分享到