接口文件Hello.java
package com.company.staticProxy;
/**
* Created by ken on 2016/7/25.
*/
public interface Hello {
void say(String str);
}
实现文件HelloImpl.java
package com.company.staticProxy;
/**
* Created by ken on 2016/7/25.
*/
public class HelloImpl implements Hello {
public String name = "奥巴马";
public String name2 = "小奥巴马";
@Override
public void say(String str) {
//System.out.println("之前");
System.out.println("hello " + str);
//System.out.println("之后");
}
}
动态代理文件DynamicProxy.java
package com.company.dynamicProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* Created by ken on 2016/7/25.
*/
public class DynamicProxy implements InvocationHandler {
// 定义代理对象
public Object target;
// 注入代理对象
public DynamicProxy(Object object) {
this.target = object;
}
/**
*
* @param proxy 被代理对象
* @param method 代理对象的方法(核心业务)
* @param args 调用代理方法所需参数
* @return 代理对象
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//before
before();
//核心业务
Object obj = method.invoke(target, args);
//after
after();
return obj;
}
//before
public void before(){
System.out.println("this is before");
}
//after
public void after(){
System.out.println("this is after");
}
}
package com.company.dynamicProxy;
import com.company.staticProxy.Hello;
import com.company.staticProxy.HelloImpl;
import java.lang.reflect.Proxy;
/**
* Created by ken on 2016/7/25.
*/
public class MainTest {
public static void main(String[] args) {
//被代理对象
HelloImpl hello = new HelloImpl();
//创建动态代理对象
DynamicProxy proxy = new DynamicProxy(hello);
// 获取被代理对象的代理
Hello result = (Hello) Proxy.newProxyInstance(hello.getClass().getClassLoader(),hello.getClass().getInterfaces(),proxy);
result.say("思路网络科技");
}
}