文档章节

day21 注解 & 类加载器 & 动态代理

萧小蚁
 萧小蚁
发布于 2016/03/29 23:31
字数 357
阅读 210
收藏 8

注解的声明及使用:

注解案例:

银行转账案例(为了方便,自己为自己动态代理,没有再写类)

类加载器:

自定义类加载器:

        写了一个与sun公司相同类名的类,加载器加载时,会自动去寻找sun公司下类的方法,结果发现,没有show()方法,就会报错。

    现在写了一个类加载器,该类加载器的作用是,指定加载哪一个类(调用构造方法时会传入调用类的地址)

    再通过反射获得方法的对象。

package sun.security.ec;

public class ECDHKeyAgreement {
	public void show(){
		System.out.println("哈哈~");
	}
}
package cn.itcast.classloader;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class MyClassLoader extends ClassLoader {
	private String rootDir;

	public MyClassLoader(String rootDir) {
		this.rootDir = rootDir;
	} 

	@Override
	public Class<?> findClass(String name) throws ClassNotFoundException {

		String extname = name.replace(".", "\\");
		String filename = rootDir + "\\" + extname + ".class";

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		try {
			InputStream is = new FileInputStream(filename);
			int len = -1;
			byte[] b = new byte[1024];

			while ((len = is.read(b)) != -1) {
				baos.write(b, 0, len);
			}
			baos.flush();
			baos.close();
			is.close();

			byte[] data = baos.toByteArray();

			return defineClass(name, data, 0, data.length);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return null;
	}
}
package sun.security.ec;

import java.lang.reflect.Method;

import cn.itcast.classloader.MyClassLoader;

public class Test {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		/*ECDHKeyAgreement ea = new ECDHKeyAgreement();
		ea.show();*/
		
		MyClassLoader loader = new MyClassLoader("E:\\代码\\160226\\day22-classloader\\bin\\");
		
		Class<?> clazz = loader.findClass("sun.security.ec.ECDHKeyAgreement");
		
		Method method = clazz.getMethod("show");//反射获得method对象
		
		method.invoke(clazz.newInstance());//执行method
		
	}

}

装饰模型-----静态代理:

动态代理,装饰模型的区别:http://www.cnblogs.com/jaredlam/archive/2011/11/08/2241089.html

动态代理:

动态代理应用:

© 著作权归作者所有

萧小蚁

萧小蚁

粉丝 99
博文 279
码字总数 192339
作品 0
海淀
程序员
私信 提问
加载中

评论(1)

如梦技术
如梦技术
13赞,把这些运用起来那就不得了了
Java反射指南

前言 Java反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信息。反射还可以让我们在运行期实例化对象,调用方法,通过调用get/set方法获取变量...

小菜鸡1
2016/08/10
131
0
二、MyBatis Mapper Bean初始化深度解析

一、问题引出 在mybatis中,mapper都是像以下一个个的接口: 但是在使用的时候,都是通过spring bean注入的方式使用的,如下: 那么,mybatis的mapper接口(例如:接口UserMapperExt)是怎么样...

yangjianzhou
03/16
133
0
AOP技术讨论

1 2015-10-14 AOP讨论 强烈推荐文章 - AOP 那点事儿 黄勇- AOP 那点事儿(续集) 黄勇- 我对AOP的理解 开涛- AOP实现机制 fantasy- 跟我学aspectj 兔子党-大胡子 本文则是根据上述文章进行的...

乒乓狂魔
2015/10/15
1K
0
SpringBoot27 JDK动态代理详解、获取指定的类类型、动态注册Bean、接口调用框架

1 JDK动态代理详解   静态代理、JDK动态代理、Cglib动态代理的简单实现方式和区别请参见我的另外一篇博文。   1.1 JDK代理的基本步骤     》通过实现InvocationHandler接口来自定义自...

CRUD_Architect
2018/08/23
0
0
Android路由方案ARouter分析

一、路由方案 原生的路由方案缺点: 显式:直接的类依赖,耦合严重 隐式:规则集中式管理,协作困难 Manifest扩展性较差 跳转过程无法控制 失败无法降级 ARouter的优势: 使用注解,实现了映...

Ruheng
2018/07/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
今天
8
0
Linux创建yum仓库

第一步、搞定自己的光盘 #创建文件夹 mkdir -p /media/cdrom #挂载光盘 mount /dev/cdrom /media/cdrom #编辑配置文件使其永久生效 vim /etc/fstab 第二步,编辑yun源 vim /ect yum.repos.d...

究极小怪兽zzz
今天
6
0
jar 更新部分文件

C:\Program Files (x86)\Java\jdk1.8.0_102\bin>jar -hIllegal option: hUsage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...Options: -c c......

圣洁之子
今天
9
0
OSChina 周六乱弹 —— 感谢女装红薯开办了这个网站

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @胖达panda:分享歌词: 我有一只小毛驴我从来也不骑,有一天我心血来潮骑着去赶集,我手里拿着小皮鞭我心里正得意,不知怎么哗啦啦,我摔了一...

小小编辑
今天
2.6K
13
DDD(四)

1,引言 软件开发者大多趋向于将关注点放在数据上,而不是领域上。这对于刚入门的DDD的新手而言也是如此。以我目前的思考方式,数据库依然占据主要的地位。开发一个功能,首先我就会考虑我会...

MrYuZixian
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部