首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

动态署理 java

2012-11-11 
动态代理 java代理工具类/** * created on Jan 13, 2010 9:34:18 AM* * Copyright 2001-2010 The Apache S

动态代理 java

代理工具类

/** * created on Jan 13, 2010 9:34:18 AM  * * Copyright 2001-2010 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package dynamicProxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.util.Date;/** * @author *  */public class DynamicLogger implements InvocationHandler {    private Object target;    public Object newProxyObject(Object target) { // 在JVM中动态生成代理类        this.target = target;        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);    }    public  DynamicLogger() {    }    /*     * (non-Javadoc)     *      * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object,     *      java.lang.reflect.Method, java.lang.Object[])     */    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        before();        System.out.println("invoke method is "+method.getName());        Object result = method.invoke(target, args);        after();        // System.out.println(proxy);        return result;    }    private void before() {        System.out.println("now is " +new Date());    }    private void after() {        System.out.println("now is " +new Date());    }}

?

?

?

接口

public interface IPerson {    void speak();        void walk();}

?

?

实现

public class RealPerson implements IPerson {    private String name;        /**     * @param name     */    public RealPerson(String name) {        super();        this.name = name;    }    /*     * (non-Javadoc)     *      * @see dynamicProxy.IPerson#speak()     */    public void speak() {        System.out.println(name+ " is speak");    }    /*     * (non-Javadoc)     *      * @see dynamicProxy.IPerson#walk()     */    public void walk() {        System.out.println(name+ " is walk");    }}

?

?

测试

public class Client extends TestCase {    public void testProxy() throws Exception {        IPerson Warrior=new RealPerson("Warrior");        IPerson Priest=new RealPerson("Priest");        DynamicLogger log1=new DynamicLogger();        DynamicLogger log2=new DynamicLogger();        IPerson proxyWarrior=(IPerson) log1.newProxyObject(Warrior);        IPerson proxyPriest=(IPerson) log2.newProxyObject(Priest);        proxyWarrior.walk();        proxyWarrior.speak();        System.out.println("====");        proxyPriest.walk();        proxyPriest.speak();    }}

?

?

输出

now is Wed Jan 13 10:05:59 CST 2010invoke method is walkWarrior is walknow is Wed Jan 13 10:05:59 CST 2010now is Wed Jan 13 10:05:59 CST 2010invoke method is speakWarrior is speaknow is Wed Jan 13 10:05:59 CST 2010====now is Wed Jan 13 10:05:59 CST 2010invoke method is walkPriest is walknow is Wed Jan 13 10:05:59 CST 2010now is Wed Jan 13 10:05:59 CST 2010invoke method is speakPriest is speaknow is Wed Jan 13 10:05:59 CST 2010

?

热点排行