`
xuelianbobo
  • 浏览: 175191 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

java jkd动态代理

 
阅读更多
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JdkProxyTest {
	/***
	 * 动态代理的测试方法
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		StudentProxy studentProxy = new StudentProxy(new Student());
		IStudent iStudent = (IStudent) studentProxy.getProxyInstence();
		iStudent.say();
		
	}
}

/***
 * 代理类 实现了jdk 动态代理的方法
 * 
 * @author bobo
 * 
 */
class StudentProxy implements InvocationHandler {
	/**
	 * 要代理的目标对象
	 */
	private Object target;

	/***
	 * 代理方法的执行处
	 */
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		// 此处的proxy 是个什么东东呢 实在是不能理解啊
		System.out.println(proxy.getClass().getInterfaces().length);
		System.out.println("before...");
		Object obj = method.invoke(target, args);
		System.out.println("after...");
		return obj;
	}

	/***
	 * 获得代理对象的地方
	 * 
	 * @param c
	 * @return
	 */
	public Object getProxyInstence() {
		return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), target.getClass().getInterfaces(), this);
	}

	public StudentProxy(Object obj) {
		this.target = obj;
	}
}

/**
 * 要被代理的类
 * 
 * @author bobo
 * 
 */
class Student implements IStudent {

	public String say() {
		System.out.println("Student.say()");
		return "i say:";
	}

}

/***
 * 被代理的类要是实现的接口
 * 
 * @author bobo
 * 
 */
interface IStudent {
	String say();
}

 

 

分享到:
评论
1 楼 xuelianbobo 2014-07-01  
其实这么看来,JDK的自带的动态代理也是动态生成了字节码(当然当中还用了反射),只是他的生成字节码的方式必须和接口绑定,而cglib,并不是正对接口来而是针对普通类来动态的生成字节码

相关推荐

    JKD1.6 64位 32位 jdk6

    6. **动态代理**:增强了反射API,使得创建动态代理类更为便捷。 7. **XPath和XSLT支持**:内置了XML处理功能,简化了XML文档的处理。 8. **增强的安全性**:加强了加密算法和安全协议,提供了更安全的网络通信。 9....

    jkd api 1.6

    - **动态代理类**:增加了`java.lang.reflect.Proxy`类,允许开发者创建动态代理对象,方便实现接口或拦截方法调用。 - **NIO.2**:引入了新的非阻塞I/O API(New I/O,即NIO.2),提供了更强大的文件系统操作和...

    jkd1.632wei_v3.5.8.18_xfdown.com.zip

    7. **动态代理(Dynamic Proxies)**:JDK 1.6改进了动态代理机制,使得创建接口代理对象更加容易,这对于实现AOP(面向切面编程)或动态服务提供很有帮助。 8. **国际化和本地化增强**:对日期、时间、货币和数字的...

    jdk版本1.6

    2. **动态代理类**:Java语言规范在1.6版本中增加了对动态代理的支持,允许在运行时创建代理类,这对于实现AOP(面向切面编程)和回调机制非常有用。 3. **Swing增强**:Swing组件库在JDK 1.6中得到了更新和优化,...

    java学习笔记JDK6课件和课本代码

    这在动态代理、元数据处理等方面有着广泛的应用。 7. **Swing和AWT**:这两个是Java的图形用户界面(GUI)库,用于创建桌面应用。学习如何使用组件、布局管理器和事件处理是开发交互式应用的必修课。 8. **网络...

    jdk1.8中文版.rar

    元类是关于类的类,提供了运行时访问和修改类信息的能力,这对于动态代理和AOP(面向切面编程)等高级技术至关重要。 最后,JDK 1.8的文档(如提供的CHM文件)是学习这些新特性和API的重要资源。它详尽地解释了每个...

    jdk6-jdk7两个版本.zip

    2. **动态代理增强**:增加了对生成类的注解支持,使得动态代理的使用更为灵活。 3. **NIO.2**:引入了新的文件系统API,提供了更强大、更灵活的文件操作功能。 4. **脚本语言支持**:通过JSR 223,JDK 6开始支持...

    JDK6-15中英文API

    1. **JDK6**:引入了改进的Swing组件、动态代理增强、增强的for循环(foreach)、可变参数(varargs)、枚举类型的遍历、异常链以及注解(Annotations)。其中,注解是面向元数据编程的重要特性,可以用于编译时和...

    jdk-api-1.6-English.rar_API1.6 Engli_jdk 6 api en_jdk1.6 api en_

    3. **动态代理**:`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口的引入,使得动态创建代理对象成为可能,便于实现AOP(面向切面编程)。 4. **NIO.2**:JDK 1.6引入了NIO.2,即新的非...

    linux命令帮助文档下载

    - **配置代理**:编辑`/usr/local/apache/conf/httpd.conf`,取消注释代理配置,使其能够代理到Tomcat的AJP端口。 - **虚拟主机配置**:编辑`conf/extra/httpd-vhosts.conf`,配置虚拟主机指向Tomcat的Web应用目录。...

    linux安装jdk、tomcat、lrzsz、nginx、erlang、rabbitmq

    Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。 **安装步骤**: 1. 下载Nginx压缩包。 2. 将压缩包上传至服务器。 3. 解压Nginx压缩包。 4. 安装Nginx所需的依赖包。 5. 进入Nginx目录...

Global site tag (gtag.js) - Google Analytics