Java代理系列-静态代理

代理模式可以做很多事,像hibernate,spring都使用了代理模式。

spring的aop就是用代理做的。

本系列分为4章,静态代理,动态代理热身,动态代理,cglib代理

今天先写一写静态代理

本例目的是在要调用的方法前后输出start和end,会使用四个类

接口HelloInterface

接口实现类HelloInterfaceImpl

静态代理类HelloStaticProxy

测试类HelloTest

首先写一个接口HelloInterface,定义一个say方法

package net.hldh.river.staticproxy;

/**
 * Created by liuhj on 2015/12/1.
 */
public interface HelloInterface {
    public void say();
}

实现接口HelloInterfaceImpl,打印Hello

package net.hldh.river.staticproxy;

/**
 * Created by liuhj on 2015/12/1.
 */
public class HelloInterfaceImpl implements HelloInterface {
    @Override
    public void say() {
        System.out.println("Hello");
    }
}

代理类HelloStaticProxy实现,在代理的方法内加前后环绕,是不是很像AOP

package net.hldh.river.staticproxy;

/**
 * Created by liuhj on 2015/12/1.
 */
public class HelloStaticProxy{

    //spring 依赖注入?类似吧
    private HelloInterface helloInterface;
    public HelloStaticProxy(HelloInterface helloInterface){
        this.helloInterface = helloInterface;
    }

    public void say_proxy(){
        System.out.println("start");
        helloInterface.say();
        System.out.println("end");
    }
}


编写测试类HelloTest

package net.hldh.river.staticproxy;

/**
 * Created by liuhj on 2015/12/1.
 */
public class HelloTest {
    public static void main(String args[]){
        HelloStaticProxy proxy = new HelloStaticProxy(new HelloInterfaceImpl());
        proxy.say_proxy();
    }
}

输出结果

start
Hello
end

静态代理呢,使用的不是太多,主要是当你要修改接口或者其他方法时要修改代理类实现类等好多方法,好麻烦

下一章主要写写动态代理前需要知道的知识

才疏学浅,如有错误敬请指出,谢谢。

你可能感兴趣的:(动态代理,原理,静态代理,java代理,cglib代理)