JDK动态代理

原创 2015年11月21日 19:50:30

一、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>





版权声明:本文为博主原创文章,未经博主允许不得转载。

JDK动态代理示例

Java动态代理可以动态地创建代理并动态地处理对所代理方法的调用。下面用《Java编程思想》中的一个例子说明: 首先是接口类,目标类要实现的接口:public interface Interface...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2016年04月29日 21:08
  • 911

JDK动态代理的实现和原理解析(基于JDK1.7)

一、什么是代理代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。详细介绍请参考:...
  • xiaokang123456kao
  • xiaokang123456kao
  • 2017年08月29日 20:18
  • 633

jdk动态代理例子

jdk动态代理例子1. 声明接口package cn.zhengyong.proxy;/** * 接口 * @author zhengyong * */ public interface Or...
  • zhengyong15984285623
  • zhengyong15984285623
  • 2016年06月17日 15:26
  • 760

细说JDK动态代理的实现原理

关于JDK的动态代理,最为人熟知的可能要数Spring AOP的实现,默认情况下,Spring AOP的实现对于接口来说就是使用的JDK的动态代理来实现的,而对于类的代理使用CGLIB来实现。那么,什...
  • mhmyqn
  • mhmyqn
  • 2015年09月15日 21:12
  • 21889

Java JDK 动态代理

代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代...
  • u012410733
  • u012410733
  • 2016年08月14日 18:18
  • 2518

JDK动态代理(一)

介绍        代理模式         代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理...
  • xiaohai0504
  • xiaohai0504
  • 2011年10月18日 16:15
  • 6798

深入剖析JDK动态代理源码实现

动态代理、静态代理优缺点优点:业务类只需要关注业务逻辑本身,保证了业务类的重用性。这是代理的共有优点。动态代理只有在用到被代理对象的时候才会对被代理类进行类加载。 而静态代理在编译器就已经开始占内存了...
  • lsgqjh
  • lsgqjh
  • 2017年03月30日 14:18
  • 355

jdk动态代理最详细讲解

Java中动态代理的实现,关键就是这两个东西:Proxy、InvocationHandler,下面从InvocationHandler接口中的invoke方法入手,简单说明一下Java如何实现动态代理...
  • win7system
  • win7system
  • 2016年05月04日 18:07
  • 610

JDK动态代理(接口的代理)

本文基于动态代理的基本思路,实现对接口的动态代理,使用接口函数完成你想完成的任务。其实主要是为了理解在使用mybatis的时候只有dao层接口函数,却可以在service层用来实现其配置文件中sql语...
  • ccityzh
  • ccityzh
  • 2017年04月12日 21:21
  • 499

JDK动态代理源码解析

分析版本jdk1.8 在分析jdk动态代理之前,先来了解java WeakReference弱引用的使用。运行期创建目标对象的代理非常耗时,使用缓存来存储生成的代理类显得尤为重要。jdk动态代理使用弱...
  • sum__mer
  • sum__mer
  • 2016年11月15日 23:34
  • 893
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JDK动态代理
举报原因:
原因补充:

(最多只允许输入30个字)