JDK动态代理
2015-11-21 19:50
603 查看
一、UserService接口
<span style="font-size:18px;">package com.seven.spring.l_proxy_2_JDK; public interface UserService { void queryUsers(); void saveUser(); void deleteUser(); }</span>二、UserServiceImpl实现类
<span style="font-size:18px;">package com.seven.spring.l_proxy_2_JDK; public class UserServiceImpl implements UserService{ @Override public void queryUsers() { System.out.println("查询一个User"); } @Override public void saveUser() { System.out.println("保存一个User"); } @Override public void deleteUser() { System.out.println("删除一个User"); } }</span>三、代理对象LogJdkproxy,实现了InvocationHandler接口
<span style="font-size:18px;">package com.seven.spring.l_proxy_2_JDK; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * jdk动态代理 * @author Administrator * */ public class LogJdkproxy implements InvocationHandler{ private Object target; //目标对象 public LogJdkproxy(Object target) { this.target = target; } /** * 创建代理对象 * @return */ public Object createProxyInstance(){ return Proxy.newProxyInstance(getClass().getClassLoader(),// target.getClass().getInterfaces(), // this); } /** * @param proxy 代理对象 * @param method 当前执行的方法 * @param args 方法参数 */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("==开始执行操作=="); Object res = method.invoke(target, args);//执行原来的方法 System.out.println("==操作执行结束=="); return res; } } </span>四、最后写一个测试类MainTest
<span style="font-size:18px;">package com.seven.spring.l_proxy_2_JDK; import org.junit.Test; public class MainTest { @Test public void test1(){ UserService userService = new UserServiceImpl(); userService = (UserService) new LogJdkproxy(userService).createProxyInstance();//使用了包装之后的代理对象 userService.saveUser(); System.out.println("--------------"); userService.queryUsers(); System.out.println("--------------"); userService.deleteUser(); } } </span>
相关文章推荐
- 【Java】求ArrayList中的TopK,不递归
- Eclipse Mars菜单中不显示Android SDK Manager
- java多线程三种方式区别,java多线程,线程同步方式,线程同步加锁的方法,wait与sleep区别
- JAVA中的三种遍历方式
- Java垃圾回收参数配置
- JAVA RMI 原理与实现(转)
- windows下Java环境配置
- 【Java小项目】简单的天气预报
- Web框架对比: Wicket vs Struts
- Java——用户名输入框
- JAVA Socket基础例程
- (转载)ajax请求Struts2返回JSON数据方法
- java.lang.IllegalArgumentException: View not attached to window manager
- No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK
- Java中getResourceAsStream的用法
- 慕课网-java 集合框架
- 关于Spring加载classpath与classpath*的过程剖析
- 慕课网--细说java 多线程 thread与runnable的区别
- Eclipse-JAVA开发环境搭建
- java计算1900到2015共有多少天?