这段时间换了新工作,因为去了外企,所以对英语的要求突然猛增,现在每天靠着谷歌翻译过日子。在开会的时候,经常遇到不懂的单词,很多时候都需要记下读音,事后再慢慢根据语境去找对应的单词,日子过得可谓是有滋有味。于是乎,自我充电的时间大部分用来学习英语了,所以这段时间更新的节奏会很慢~
对于大多数Java程序员而言,我们会经常用到字节码生成与动态代理技术,比如编译时织入的AOP框架中,在Spring的Bean组织管理中,亦或是Web服务器的JSP编译器里。总之,我们在不知不觉中已经大量的用到了这些技术了。
动态代理中所说的动态,是基于Java代码实际编写代理类的静态代理而言的。相比较而言,它的优势在于可以在不知道原始类与接口的时候,就先确定了代理行为,可以很方便的在不同的应用场景中灵活运用。同时,还可以减少代码的行数,让你的代码更加美观和简洁。
一、动态代理
这边简单的实现一个动态代理的方法,如果想看基于AOP与注解形式的,可以去看我之前的文章,也讲的很详细【进阶之路】自定义注解介绍与实战。
public class DynamicTest {
public static void main(String[] args) {
IPayment pay = (IPayment) new BankDynamicProxy().bind(new Alipay());
pay.payment();
}
interface IPayment {
void payment();
}
static class Alipay implements IPayment {
@Override
public void payment() {
System.out.println("Use Alipay to payment");
}
}
static class BankDynamicProxy implements InvocationHandler {
Object dynamicProxy;
Object bind(Object dynamicProxy) {
this.dynamicProxy = dynamicProxy;
return Proxy.newProxyInstance(dynamicProxy.getClass().getCl