您的位置:首页 > 编程语言 > Java开发

Java代理系列-静态代理

2015-12-02 07:36 513 查看
代理模式可以做很多事,像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


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

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

才疏学浅,如有错误敬请指出,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息