文档章节

JDK代理

EdwinYu
 EdwinYu
发布于 2017/05/19 10:35
字数 393
阅读 3
收藏 0
package com.java.proxy.jdk;

public interface Student {
	public void addStudent ();
}


package com.java.proxy.jdk;

public class StudentImpl implements StudentDao{

	public void addStudent () {
		System.out.println("正在插入学生信息...");
	}
	
}



package com.java.proxy.jdk;



public class JDKProxy {
	public static void main(String[] args) {
		//1.创建一个对象
		StudentDao dao = new StudentImpl();
		dao.add();
    //此处输出:正在插入学生信息...
	}
}

但是我们这里血药用到jdk的动态代理:

代码如下:
package com.java.proxy.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
// JDK是对对象做代理
public class JDKProxy implements InvocationHandler{
	
	private StudentDao  studentDao;  //定义一个全局变量方便后面用到

	//定义一个方法用于创建JDK代理对象
	//JDK代理是对对象做代理
	public StudentDaocreateProxyObject(StudentDao  studentDao){
		//被代理对象作为参数传入进来
		this.studentDao= studentDao; 
		//获取类加载器:对谁做代理,使用谁的类加载器
		ClassLoader loader = studentDao.getClass().getClassLoader();
		//获取被代理对象的所有实现接口
		Class<?>[] interfaces = studentDao.getClass().getInterfaces();
		//创建Handler对象
		InvocationHandler h = this;
		Object proxyObject = Proxy.newProxyInstance(loader, interfaces, h); //创建代理对象
		return (StudentDao) proxyObject;
	}

	public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
    //这里面可以写一些你需要增强的代码
		System.out.println("正在连接数据库");
		//对原始操作进行调用(反射)
		method.invoke(studentDao, args);
		System.out.println("开始关闭数据库");
		return null;
	}
	
	public static void main(String[] args) {
		//1.创建一个对象
		UserDao dao = new UserImpl();
		//2.为原始对象创建代理对象
		UserDao daoProxy = new JDKProxy().createProxyObject(dao);  //其中这里面穿的是个对象
		//3.使用代理对象运行操作
		daoProxy.add();
		
/**
*  运行结果 :正在连接数据库
            正在插入学生信息...
            开始关闭数据库
*
*
/
	}
}

希望对你们有帮助,自己也在学习这个,分享下。

© 著作权归作者所有

EdwinYu
粉丝 0
博文 3
码字总数 1582
作品 0
武汉
私信 提问
JDK动态代理和CGLiB动态代理

JDK动态代理 JDK动态代理要求类必须实现某一接口,代理类是同一接口的实现类。 JDK动态代理主要涉及两个类:Proxy和InvocationHandler。InvocationHandler是一个接口,可以通过实现该接口定义...

kakayang2011
2016/03/13
80
0
Spring中JDK动态代理和Cglib代理的区别

Spring的AOP基于代理模式,并且它即使用到了JDK动态代理也使用了Cglib代理。 如下代码是springAOP中默认的代理实现类DefaultAopProxyFactory,其中创建代理的方法createAopProxy,在这个方法...

王子城
2018/08/01
0
0
JDK动态代理源码学习

继上一篇博客设计模式之代理模式学习之后http://blog.csdn.net/u014427391/article/details/75115928,本博客介绍JDK动态代理的实现原理,学习一下JDK动态代理的源码。 Proxy类。该类即为动态...

Javahih
2017/07/21
0
0
深入理解JDK动态代理机制

基于JDK8 Java中代理的实现一般分为三种 JDK静态代理 JDK动态代理 CGLIB动态代理 在Spring的AOP实现中,主要应用了JDK动态代理以及CGLIB动态代理。本文讨论关于JDK动态代理机制。 代理一般实...

芥末无疆sss
2017/11/13
0
0
Spring AOP 创建代理的源码解析

相关文章 Spring AOP 注解方式源码解析 Spring AOP 功能使用详解 Spring 的 getBean 方法源码解析 Spring bean 创建过程源码解 Spring 中 bean 注册的源码解析 前言 在上篇文章 Spring AOP 注...

TSMYK
01/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
5
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
5
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
17
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部