mirror of
https://github.com/Estom/notes.git
synced 2026-02-06 20:14:37 +08:00
Java内容重新整理删除过期的东西
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
package cn.aofeng.demo.java.lang.instrument;
|
||||
|
||||
import java.lang.instrument.Instrumentation;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
||||
import cn.aofeng.demo.util.LogUtil;
|
||||
|
||||
/**
|
||||
* Instrument入口类。
|
||||
*
|
||||
* @author <a href="mailto:aofengblog@163.com">聂勇</a>
|
||||
*/
|
||||
public class FirstInstrumentation {
|
||||
|
||||
public static void premain(String options, Instrumentation ins) {
|
||||
if (StringUtils.isBlank(options)) {
|
||||
LogUtil.log("instrument without options");
|
||||
} else {
|
||||
LogUtil.log("instrument with options:%s", options);
|
||||
}
|
||||
|
||||
ins.addTransformer(new FirstTransformer());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package cn.aofeng.demo.java.lang.instrument;
|
||||
|
||||
import java.lang.instrument.ClassFileTransformer;
|
||||
import java.lang.instrument.IllegalClassFormatException;
|
||||
import java.security.ProtectionDomain;
|
||||
|
||||
import cn.aofeng.demo.util.LogUtil;
|
||||
|
||||
/**
|
||||
* 只输出问候语,不进行字节码修改的Class转换器。
|
||||
*
|
||||
* @author <a href="mailto:aofengblog@163.com">聂勇</a>
|
||||
*/
|
||||
public class FirstTransformer implements ClassFileTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,
|
||||
ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
|
||||
LogUtil.log(">>> %s", className);
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
14
Java/JavaDemo/codedemo/java/lang/instrument/Hello.java
Normal file
14
Java/JavaDemo/codedemo/java/lang/instrument/Hello.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package cn.aofeng.demo.java.lang.instrument;
|
||||
|
||||
/**
|
||||
* Instrumentation启动类。 *
|
||||
*
|
||||
* @author <a href="mailto:aofengblog@163.com">聂勇</a>
|
||||
*/
|
||||
public class Hello {
|
||||
|
||||
public static void main(String[] args) {
|
||||
// nothing
|
||||
}
|
||||
|
||||
}
|
||||
40
Java/JavaDemo/codedemo/java/lang/instrument/README.md
Normal file
40
Java/JavaDemo/codedemo/java/lang/instrument/README.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# 一、Instrumentation入门
|
||||
|
||||
* [FirstTransformer.java](FirstTransformer.java) 处理字节码,由类FirstInstrumentation执行
|
||||
* [FirstInstrumentation.java](FirstInstrumentation.java) instrumentation入口类,由javaagent载入执行
|
||||
* [build.xml](build.xml) Ant脚本,负责编译、打包和运行
|
||||
|
||||
在当前目录下执行命令:
|
||||
```bash
|
||||
ant
|
||||
```
|
||||
|
||||
输出信息如下:
|
||||
> [java] instrument with options:"Hello, Instrumentation"
|
||||
> [java] >>> java/lang/invoke/MethodHandleImpl
|
||||
> [java] >>> java/lang/invoke/MethodHandleImpl$1
|
||||
> [java] >>> java/lang/invoke/MethodHandleImpl$2
|
||||
> [java] >>> java/util/function/Function
|
||||
> [java] >>> java/lang/invoke/MethodHandleImpl$3
|
||||
> [java] >>> java/lang/invoke/MethodHandleImpl$4
|
||||
> [java] >>> java/lang/ClassValue
|
||||
> [java] >>> java/lang/ClassValue$Entry
|
||||
> [java] >>> java/lang/ClassValue$Identity
|
||||
> [java] >>> java/lang/ClassValue$Version
|
||||
> [java] >>> java/lang/invoke/MemberName$Factory
|
||||
> [java] >>> java/lang/invoke/MethodHandleStatics
|
||||
> [java] >>> java/lang/invoke/MethodHandleStatics$1
|
||||
> [java] >>> sun/misc/PostVMInitHook
|
||||
> [java] >>> sun/usagetracker/UsageTrackerClient
|
||||
> [java] >>> java/util/concurrent/atomic/AtomicBoolean
|
||||
> [java] >>> sun/usagetracker/UsageTrackerClient$1
|
||||
> [java] >>> sun/usagetracker/UsageTrackerClient$4
|
||||
> [java] >>> sun/usagetracker/UsageTrackerClient$3
|
||||
> [java] >>> java/io/FileOutputStream$1
|
||||
> [java] >>> sun/launcher/LauncherHelper
|
||||
> [java] >>> cn/aofeng/demo/java/lang/instrument/Hello
|
||||
> [java] >>> sun/launcher/LauncherHelper$FXHelper
|
||||
> [java] >>> java/lang/Class$MethodArray
|
||||
> [java] >>> java/lang/Void
|
||||
> [java] >>> java/lang/Shutdown
|
||||
> [java] >>> java/lang/Shutdown$Lock
|
||||
57
Java/JavaDemo/codedemo/java/lang/instrument/build.xml
Normal file
57
Java/JavaDemo/codedemo/java/lang/instrument/build.xml
Normal file
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project name="Instrumentation" default="run" basedir="../../../../../../../">
|
||||
|
||||
<property name="project.src.dir" value="${basedir}/src" />
|
||||
<property name="project.lib.dir" value="${basedir}/lib" />
|
||||
<property name="project.conf.dir" value="${basedir}/conf" />
|
||||
<property name="project.target.dir" value="${basedir}/classes" />
|
||||
<property name="project.dist.dir" value="${basedir}/dist" />
|
||||
|
||||
<path id="project.classpath">
|
||||
<fileset dir="${project.lib.dir}">
|
||||
<include name="*.jar" />
|
||||
</fileset>
|
||||
</path>
|
||||
|
||||
<target name="prepare">
|
||||
<delete dir="${project.target.dir}" />
|
||||
<mkdir dir="${project.target.dir}"/>
|
||||
<copy todir="${project.target.dir}">
|
||||
<fileset dir="${project.conf.dir}">
|
||||
<include name="**/*.properties" />
|
||||
<include name="**/*.xml" />
|
||||
</fileset>
|
||||
</copy>
|
||||
|
||||
<delete dir="${project.dist.dir}" />
|
||||
<mkdir dir="${project.dist.dir}" />
|
||||
</target>
|
||||
|
||||
<target name="compileWithJavac" depends="prepare">
|
||||
<echo message="compile with javac" />
|
||||
<javac destdir="${project.target.dir}" srcdir="${project.src.dir}" source="1.8" target="1.8"
|
||||
encoding="UTF-8" debug="true" includeantruntime="false">
|
||||
<classpath refid="project.classpath" />
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<target name="package" depends="compileWithJavac">
|
||||
<jar destfile="${project.dist.dir}/hello.jar">
|
||||
<fileset dir="${project.target.dir}">
|
||||
<include name="cn/aofeng/demo/java/lang/instrument/*.class" />
|
||||
</fileset>
|
||||
<manifest>
|
||||
<attribute name="Premain-Class" value="cn.aofeng.demo.java.lang.instrument.FirstInstrumentation" />
|
||||
</manifest>
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
<target name="run" depends="package">
|
||||
<java classname="cn.aofeng.demo.java.lang.instrument.Hello" fork="true">
|
||||
<classpath refid="project.classpath" />
|
||||
<classpath location="${project.target.dir}" />
|
||||
<jvmarg value="-javaagent:${project.dist.dir}/hello.jar="Hello, Instrumentation"" />
|
||||
</java>
|
||||
</target>
|
||||
|
||||
</project>
|
||||
Reference in New Issue
Block a user