怎样拦截classloader实现类方法截获
我目前正在开发的一个组件想实现一个功能: 就是通过配置文件配置类名,就能够拦截该类所有方法的调用,而该类可能没有实现任何接口,并且这个过程对于系统程序是透明的,我想在虚拟机这层解决这个问题,对于组件的部署都是非常有帮助的.
目前我的想法就是通过拦截classloader,或者实现自己的classloader,另外通过修改原class的字解码实现拦截方法。但是遇到2个难题:
1)classloader的拦截似乎并不那么听话,我是通过Thread.setContextClassLoader()来设置自己的classloader,但是似乎对于下面的程序,并不一定就会采用我设置的classloader工作,在多个容器和JDK版本下试过,行为有点不一样,而SUN在这方面的资料又非常匮乏。
2)字解码修改,往往我需要代理的类在我的组件运行时已经被上层classloader加载,这时试图修改该类的字解码,会引起JVM报错,比如重复加载之类的错误。
由于资料非常匮乏,所以,非常希望有这方面经验的人,能够给大家讲解一下虚拟机加载类的时序,已经类生存的周期,命名空间,以及安全控制等问题,当然最重要的是告诉我怎么实现我想要的功能,呵呵。