java简单的动态代理示例
2015-07-07 14:11
579 查看
1、定义一个接口Student,后面用于强转proxy实例类型
interface Student { public void study(); }
2、定义接口实现类StudentImpl
对象调用getClass().getClassLoader(), getClass().getInterfaces(),用于proxy实例参数
public class StudentImpl implements Student { public void study() { System.out.println("woaixuexi"); } }
3、定义自己的MyInvocationHandle实现InvocationHandler,在此定义所要增加的方法
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class MyInvocationHandle implements InvocationHandler { private Object handler; public MyInvocationHandle() { super(); } public MyInvocationHandle(Object handler) { super(); this.handler = handler; } public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable { System.out.println("xuexiqianchifan"); Object result = arg1.invoke(handler, arg2); System.out.println("shuijiao"); return result; } }
4、测试类
new StudentImpl 对象,作为参数传入MyInvocationHandle,产生proxy实例,向下转型为Student,不能是StudentImpl
import java.lang.reflect.Proxy; public class StudentTest { public static void main(String[] args) { StudentImpl st = new StudentImpl(); MyInvocationHandle my = new MyInvocationHandle(st); Student p = (Student) Proxy.newProxyInstance(st.getClass().getClassLoader(), st.getClass().getInterfaces(), my); p.study(); } }
相关文章推荐
- 追索权 Eclipse + NDK error: stray '\24' in program
- SpringMVC(五)@RequestHeader和@CookieValue
- Spring中 @Autowired标签与 @Resource标签 的区别
- JSR-303规范,Bean Validation(spring mvc中如何校验)
- SpringSecurity工作原理小解读
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable (转)
- eclipse 组态xdebug
- Java反射机制详解
- 排序算法的分析及java实现
- Spring中引用不同xml中的bean
- FreeMarker整合Spring 3(转)
- Rose 是由 人人网、糯米网 提供的、基于Servlet规范、Spring“规范”的开放源代码WEB开发框架
- Netty简单介绍和例子
- SpringMVC(四)@RequestParam
- 《Java程序》使用递归调用的方法,写一个能够将字符串倒叙输出的函数
- java 反射
- 关于java图像处理的一些文章
- Java并发编程:线程池的使用
- JAVA中List、Map、Set的区别与选用
- spring mvc DispatcherServlet详解之前传---FrameworkServlet