发表于: 2017-09-26 18:05:17
2 786
今天完成的事情:
学习了静态代理和动态代理,静态代理和动态代理都存在一定的缺陷,可以用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个月的魔鬼训练,争取明年找个自己满意的工作。多谢师兄这几天审批我的日报,下次去上海,请师兄吃炸鸡,喝啤酒。
评论