spring所使用的代理原理是什么?

spring的aop使用了jdk的代理或者是cgilib的代理,或者aspectj的静态代理。
请教这几种代理是如何实现的?
cgilib所属动态代理,他难道能在运行时刻修改类定义?
但java语言不支持运行时刻修改类吧?
jdk支持动态代理,这是java核心语言,sun提供了什么东西我不知道。
但是cgilib是如何做到的?
同时请教下aspectj是否是通过修改字节码来实现静态代理的?
感谢各位解答

[b]问题补充:[/b]
java的字节码,也就是class类除了sun别人也能理解?还是说sun开源是吧字节码规范也开源了?
同时问下.net有没有代理的能力?

关于动态代理与CGLIB讨论,希望会有帮助
http://www.iteye.com/topic/182654

cglib的动态代理原理是借助asm开源框架动态生成类定义的字节码,并且创建类定义的势力。你可以下cglib的发布包,读一读里面的测试用例,可以帮你更深入的了解它。
JDK的动态代理功能有限,cglib包含了所有JDK代理的功能。

JAVA强大的反射机制..