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

注解的声明及使用:

注解案例:

银行转帐案例(为了方便,本身为本身动态代理,没有再写类)
html

类加载器:

自定义类加载器:

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

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

    再经过反射得到方法的对象。
this

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.htmlspa

动态代理:

动态代理应用:

相关文章
相关标签/搜索