静态代理和动态代理
本文内容
1、静态代理示例及相关解释2、动态代理示例及相关解释
一、静态代理示例及相关解释
public interface HelloWorld {void print(String message);void say(String message);}
public class HelloWorldImp implements HelloWorld{@Overridepublic void print(String message) {// TODO Auto-generated method stubSystem.out.println("Hello "+message);}@Overridepublic void say(String message) {// TODO Auto-generated method stubSystem.out.println("Say "+message);}}
public class StaticProxy implements HelloWorld{private HelloWorld helloWorld;public StaticProxy(HelloWorld helloWorld) {// TODO Auto-generated constructor stubthis.helloWorld = helloWorld;}@Overridepublic void print(String message) {// TODO Auto-generated method stubhelloWorld.print(message);}@Overridepublic void say(String message) {// TODO Auto-generated method stubhelloWorld.say(message);}}
public class Main {public static void main(String[] args) {HelloWorld helloWorld = new HelloWorldImp();StaticProxy staticProxy = new StaticProxy(helloWorld);staticProxy.print("world");staticProxy.say("world");}}
/** * 实现了业务逻辑的分离 低耦合 * @author Administrator * */public class MyInvocationHandler implements InvocationHandler {// 要被代理的对象private Object object;/** * 绑定要被代理额的对象,返回代理对象 * * @param object * @return */public Object bindRelation(Object object) {this.object = object;Object proxy = Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this);return proxy;}/** * 当拦截这个类接口中的方法的时候被调用 一个过滤的作用 可以添加额外方法 */public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {// TODO Auto-generated method stub// System.out.println("proxy:" + proxy.toString());System.out.println("事务开始");Object result = method.invoke(object, args);System.out.println("事务结束");return result;}public Object getObject() {return object;}public void setObject(Object object) {this.object = object;}}
public class Main {public static void main(String[] args) {HelloWorld helloWorld = new HelloWorldImp();MyInvocationHandler invocationHandler = new MyInvocationHandler();HelloWorld proxy = (HelloWorld) invocationHandler.bindRelation(helloWorld);proxy.print("world");proxy.say("hello");}}