Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
SkyWalking
提交
d635a4af
S
SkyWalking
项目概览
apache
/
SkyWalking
上一次同步 1 年多
通知
302
Star
21345
Fork
6091
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d635a4af
编写于
3月 11, 2016
作者:
wu-sheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加大量的复杂结构,用于定义对类的拦截,以及实例级上下文存储。#36
上级
47fde7eb
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
66 addition
and
2 deletion
+66
-2
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java
...ywalking/plugin/interceptor/EnhanceClazz4Interceptor.java
+12
-1
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhancedClassInstanceContext.java
...king/plugin/interceptor/EnhancedClassInstanceContext.java
+18
-0
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/IAroundInterceptor.java
...oud/skywalking/plugin/interceptor/IAroundInterceptor.java
+11
-0
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/IEnhancedClassInstanceContext.java
...ing/plugin/interceptor/IEnhancedClassInstanceContext.java
+12
-0
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorDefine.java
...loud/skywalking/plugin/interceptor/InterceptorDefine.java
+9
-0
skywalking-api/src/test/java/test/ai/cloud/bytebuddy/SimulateMain.java
...i/src/test/java/test/ai/cloud/bytebuddy/SimulateMain.java
+4
-1
未找到文件。
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java
浏览文件 @
d635a4af
...
...
@@ -36,7 +36,10 @@ public class EnhanceClazz4Interceptor {
}
}
private
void
enhance0
(
String
enhanceOriginClassName
)
{
private
void
enhance0
(
String
interceptorDefineClassName
)
throws
InstantiationException
,
IllegalAccessException
,
ClassNotFoundException
{
InterceptorDefine
define
=
(
InterceptorDefine
)
Class
.
forName
(
interceptorDefineClassName
).
newInstance
();
String
enhanceOriginClassName
=
define
.
getBeInterceptedClassName
();
/**
* add '$$Origin' at the end of be enhanced classname <br/>
* such as: class com.ai.cloud.TestClass to class com.ai.cloud.TestClass$$Origin
...
...
@@ -48,5 +51,13 @@ public class EnhanceClazz4Interceptor {
.
make
()
.
load
(
ClassLoader
.
getSystemClassLoader
(),
ClassLoadingStrategy
.
Default
.
INJECTION
).
getLoaded
();
/**
* define class as origin class name. and inject to classloader. <br/>
* new class need:<br/>
* 1.implement com.ai.cloud.skywalking.plugin.interceptor.IEnhancedClassInstanceContext(); <br/>
* 2.add field '_$EnhancedClassInstanceContext' of type EnhancedClassInstanceContext
* 3.intercept constructor and method if required by interceptorDefineClass
*/
}
}
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhancedClassInstanceContext.java
0 → 100644
浏览文件 @
d635a4af
package
com.ai.cloud.skywalking.plugin.interceptor
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 被增强的类实例,需扩展的context属性,用于在不同的方法,或者构造函数间保存实例
*
* @author wusheng
*
*/
public
class
EnhancedClassInstanceContext
{
public
static
final
String
FIELD_NAME
=
"_$EnhancedClassInstanceContext"
;
private
Map
<
Object
,
Object
>
context
=
new
HashMap
<
Object
,
Object
>();
}
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/IAroundInterceptor.java
0 → 100644
浏览文件 @
d635a4af
package
com.ai.cloud.skywalking.plugin.interceptor
;
public
interface
IAroundInterceptor
{
public
void
onConstruct
(
EnhancedClassInstanceContext
context
);
public
void
beforeMethod
(
EnhancedClassInstanceContext
context
);
public
void
afterMethod
(
EnhancedClassInstanceContext
context
);
}
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/IEnhancedClassInstanceContext.java
0 → 100644
浏览文件 @
d635a4af
package
com.ai.cloud.skywalking.plugin.interceptor
;
/**
* 被增强的类,会实现此接口,用于快速获取实例级属性上下文扩展<br/>
* @see com.ai.cloud.skywalking.plugin.interceptor.EnhanceClazz4Interceptor.enhance0()
*
* @author wusheng
*
*/
public
interface
IEnhancedClassInstanceContext
{
public
EnhancedClassInstanceContext
getEnhancedClassInstanceContext
();
}
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorDefine.java
0 → 100644
浏览文件 @
d635a4af
package
com.ai.cloud.skywalking.plugin.interceptor
;
public
interface
InterceptorDefine
{
public
String
getBeInterceptedClassName
();
public
String
[]
getBeInterceptedMethods
();
public
IAroundInterceptor
instance
();
}
skywalking-api/src/test/java/test/ai/cloud/bytebuddy/SimulateMain.java
浏览文件 @
d635a4af
...
...
@@ -11,7 +11,7 @@ import net.bytebuddy.pool.TypePool;
public
class
SimulateMain
{
public
static
void
main
(
String
[]
args
)
throws
NoSuchFieldException
,
SecurityException
,
InstantiationException
,
IllegalAccessException
{
SecurityException
,
InstantiationException
,
IllegalAccessException
,
ClassNotFoundException
{
TypePool
typePool
=
TypePool
.
Default
.
ofClassPath
();
Class
<?>
newClazz
=
new
ByteBuddy
()
...
...
@@ -40,6 +40,9 @@ public class SimulateMain {
TestClass
t
=
new
TestClass
(
"abc"
);
System
.
out
.
println
(
t
.
testA
(
"1"
));
t
=
new
TestClass
(
"abc"
);
System
.
out
.
println
(
t
.
testA
(
"1"
));
// TestClass t2 = null;
// try {
// t2 = (TestClass) Class.forName("test.ai.cloud.bytebuddy.TestClass")
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录