代理模式
代理模式的初步理解 当一个方法有一个中间商进行实现并增强的时候称为代理。
静态代理与动态代理的主要区别?
当静态代理的时候,采用中间的代理类进行实现,比如说你需要租房子,你和房东的实现一个房子的接口,单房东不仅仅是租房子他还可以对你进行一些增强,他在实现这个租房子的接口当中调用牛实现的方法,斌进行一些功能的添加,比如说可以先找人,然后再对你的方法进行实现。而动态代理,他可以不勇房东这一个实现类,你可以自动的适配到一个租房的业务当中去,不需要每次创建一个中间商,直接调用一个固定的万能boss代理。
静态代理的实现?
- 创建一个具体的需要实现对象
- 利用Proxy类的newProxyInstance方法进行对象的创建 当中传递的是 类加载器 接口 InvocationHandler
- 匿名内部类对象 第一个参数 proxy 第二个method 第三个 args
- method.invoke是一旦使用代理对象调用方法就会执行的
- return 返回值是方法执行的参数 具体要看接口当中方法的返回值类型
为什么method方法一定会执行?
public static void main(String[] args) {
final FindHappy f=new JinLian();
FindHappy ff=(FindHappy)Proxy.newProxyInstance(JinLian.class.getClassLoader(), JinLian.class.getInterfaces(), new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
method.invoke(f,args);
return null;
}
});
ff.findHappy();
}
双亲委派机制
首先由下往上寻找 然后由上往下加载