java创建动态代理类

这几天一直在研究aop的问题,发现aop的基础是java的动态代理类,一个例子如下
1.一个接口
Java代码
  1. public interface HelloWorld {
  2. void sayHelloWorld();
  3. }
public interface HelloWorld {
 void sayHelloWorld();
}


2.该接口实现类
Java代码
  1. public class HelloWorldImpl implements HelloWorld {
  2. public void 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. public class HelloWorldHandler implements 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. return null;
  23. }
  24. private void doBefore()
  25. {
  26. System.out.println("before method invoke!");
  27. }
  28. private void 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. public class Test {
  5. /**
  6. * @param args
  7. */
  8. public static void 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. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值