java反射和动态代理

29 篇文章 0 订阅
28 篇文章 0 订阅

说实话,java反射是我刚搞懂的,搞了一年的java,连个java反射都不会,感觉愧对丹尼斯里奇祖师爷。
好了,废话不多说了,说说自己的见解。
反射,不仅在java中有,c#中也是有java机制的,反射的作用是让你自己你自己所有的属性,方法和构造器。而反射主要用于框架中,就是我们import导入了框架中的类,但是该类的属性,方法是通过反射知道的,总结来说,导入类之后,我知道了自己有几斤几两,知道我自己有什么属性,方法,那么我就可以用我的这些属性和方法。

动态代理是在代理的基础上衍生的更高级的代理,而动态代理也是主要用于框架,其原理就是:
我想要调用某个类,但是我不直接去调用,而是交给一个中间代理的类,让他帮我去调用,其效果和直接调用是一样的,只不过,这样的设计是不是减小了耦合呢?!
而说的动态代理,其实就是在原来写死的代理基础上,让他可以通过参数动态改变的。

网上看到一个特别好的例子:
这是想要被调用的类:

public interface Interface {
    void doSomething();
    void somethingElse(String arg);
}
public class RealObject implements Interface {
    public void doSomething() {
        System.out.println("doSomething.");
    }
    public void somethingElse(String arg) {
        System.out.println("somethingElse " + arg);
    }
}

这是代理方法:

public class DynamicProxyHandler implements InvocationHandler {
    private Object proxyed;

    public DynamicProxyHandler(Object proxyed) {
        this.proxyed = proxyed;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        System.out.println("代理工作了.");
        return method.invoke(proxyed, args);
    }
}

这是测试类:

public class Main {
    public static void main(String[] args) {
        RealObject real = new RealObject();
        Interface proxy = (Interface) Proxy.newProxyInstance(
                Interface.class.getClassLoader(), new Class[] {Interface.class},
                new DynamicProxyHandler(real));

        proxy.doSomething();
        proxy.somethingElse("luoxn28");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值