java 静态代理 以及 动态代理 demo (一)

目的:(1)通过引入你里对象的方式来间接仿问目标对象,防止直接访问目标衬象给系统带来的不必要复杂性;

           (2)通过代理对象对原有的业务增强;

1  先看一个静态代理

静态代理:由程序员创建或特定工具自动生成源代码,也就是在编译时就已经将接口,被代理类,代理类等确定下来。在程序运行之前,代理类的.class文件就已经生成。

个人理解 其实就是 被代理类 不是java 反射机制生成的 就是静态代理

定义接口   Hello

 

被代理类

 

代理类

测试结果如下

 

(二) 动态代理

 接口  Hello 以及 HelloWorld 都不需要改变,代理类  HelloProxy 需要继承  InvocationHandler , 代码如下:

package com.study.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class HelloProxy implements InvocationHandler {

    private Hello hello;

    public HelloProxy(Hello hello) {
        this.hello = hello;
    }

    private void before() {
        System.out.println("-----------before----------------");
    }

    private void end() {
        System.out.println("-----------end----------------");
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        before();
        Object object = method.invoke(hello, args);
        end();
        return object;
    }

    public Object getProxyInstance() {
        return Proxy.newProxyInstance(hello.getClass().getClassLoader(), hello.getClass().getInterfaces(), this);
    }

}

 

测试结果跟刚才完全一样的:

 

一些思考:

单一职责原则:一个类或者一个接口只负责唯一项职责,尽量设计出功能单一的接口;依赖倒转原则二高层模块不应该依赖低层模块具体实现,解藕高层与低层。既面向接口编程,当实现表时,只需提供新的实现类,不需要修改高层模块代码

 

开放一封闭原则:程序对外扩展开放,对修改关闭;换句话说,当需求发生变化时,我们可以通过添加新代码来满足新需求,而不是通过修改原来的实现代码来满足新需求

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值