java创建动态代理类

来源:互联网 发布:mac暴风影音删除不了 编辑:程序博客网 时间:2024/05/18 02:37
这几天一直在研究aop的问题,发现aop的基础是java的动态代理类,一个例子如下
1.一个接口
Java代码
  1. publicinterface HelloWorld {
  2. void sayHelloWorld();
  3. }
public interface HelloWorld { void sayHelloWorld();}


2.该接口实现类
Java代码
  1. publicclass HelloWorldImplimplements HelloWorld {
  2. publicvoid sayHelloWorld() {
  3. System.out.println("Hello World!");
  4. }
  5. }
public class HelloWorldImpl implements HelloWorld { public void sayHelloWorld() {  System.out.println("Hello World!"); }}

3.处理类,类中包括了前置和后置方法
Java代码
  1. package proxy;
  2. import java.lang.reflect.InvocationHandler;
  3. import java.lang.reflect.Method;
  4. publicclass HelloWorldHandlerimplements InvocationHandler {
  5. // 要代理的原始对象
  6. private Object objOriginal;
  7. /**
  8. ** 构造函数
  9. */
  10. public HelloWorldHandler(Object obj) {
  11. this.objOriginal = obj;
  12. }
  13. public Object invoke(Object proxy, Method method, Object[] args)
  14. throws Throwable {
  15. Object result;
  16. // 方法调用之前
  17. doBefore();
  18. //调用原始对象的方法
  19. result = method.invoke(this.objOriginal ,args);
  20. //方法调用之后
  21. doAfter();
  22. returnnull;
  23. }
  24. privatevoid doBefore()
  25. {
  26. System.out.println("before method invoke!");
  27. }
  28. privatevoid doAfter()
  29. {
  30. System.out.println("after method invoke!");
  31. }
  32. }
package proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class HelloWorldHandler implements InvocationHandler { // 要代理的原始对象 private Object objOriginal; /**  ** 构造函数  */ public HelloWorldHandler(Object obj) {  this.objOriginal = obj; } public Object invoke(Object proxy, Method method, Object[] args)   throws Throwable {  Object result;  // 方法调用之前  doBefore();  //调用原始对象的方法  result = method.invoke(this.objOriginal ,args);  //方法调用之后  doAfter();  return null; }  private void doBefore() {  System.out.println("before method invoke!"); }  private void doAfter() {  System.out.println("after method invoke!"); }}

4.测试类
Java代码
  1. package proxy;
  2. import java.lang.reflect.InvocationHandler;
  3. import java.lang.reflect.Proxy;
  4. publicclass Test {
  5. /**
  6. * @param args
  7. */
  8. publicstaticvoid main(String[] args) {
  9. HelloWorld hw=new HelloWorldImpl();
  10. InvocationHandler handler=new HelloWorldHandler(hw);
  11. //创建动态代理对象
  12. HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(
  13. hw.getClass().getClassLoader(),
  14. hw.getClass().getInterfaces(),
  15. handler);
  16. proxy.sayHelloWorld();
  17. }
  18. }
原创粉丝点击