java初学者练手项目 java项目源码哪里找


1. 前言 为什么会接触JavaAgent呢?
这起源于笔者最近在读Dubbo的源码,Dubbo有一个很有意思的功能——SPI,它可以根据运行时的URI参数,自适应的调用特定的实现类 。大致的原理其实也能猜到,无非就是生成一个代理类,反射解析URI参数里的值,然后再调用对应的实现类 。虽然大概可以猜到实现原理,但毕竟只是猜想,抱着科学严谨的精神,还是想看看Dubbo的实现源码,此时就有了一个想法,能不能把Dubbo生成的代理对象的Class类Dump下来,然后反编译看看它的源码呢?
理论上是完全可行的,阿里有一个很好用的开源工具Arthas,它的jad命令就支持对JVM已经加载的类进行反编译查看源码,笔者把Arthas项目源码down下来了,查看以后发现,需要用到JavaAgent技术 。
2. JavaAgent规范 在JDK1.5以后,我们可以使用JavaAgent技术,以「零侵入」的方式对Java程序做增强 。例如阿里云的Arms应用监控服务,就可以通过JavaAgent的方式接入一个探针,它会把应用的运行数据上报到阿里云,开发者可以在后台查看到应用的运行数据 。这种方式,不需要我们对应用做任何改动,就可以轻松实现应用监控 。
JavaAgent是一种规范,它分为两类:主程序运行前Agent、主程序运行后Agent 。它可以在JVM加载Class文件前,对字节码做修改,甚至允许修改已经加载过的Class,这样我们就可以对应用做增强、以及实现代码热部署 。
主程序运行前Agent的步骤:
1、编写Agent类,该类必须有静态方法premain() 。
public class MyAgentClass {// JVM优先执行该方法public static void premain(String agentArgs, Instrumentation inst) {System.err.println("main before...");}public static void premain(String agentArgs) {System.err.println("main before...");}} 2、在resources/me

    推荐阅读