拦截方法:

1、普通方法  @OnMethod(clazz="", method="")

2、构造函数@OnMethod(claszz="", method="<init>")

3、拦截同名函数,用参数区分

一、拦截构造函数

1、创建接口

    @RequestMapping("/constructor")
public User constructor(User user){
return user;
}

  

2、测试接口

http://127.0.0.1:8080/monitor_tuning/ch4/constructor?id=1&name=nick

3、查看进程

4、创建btrace脚本,运行btrace脚本

package com.example.monitor_tuning.chapter4;

import com.sun.btrace.AnyType;
import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.*; /**
* 拦截构造函数.
*/
@BTrace
public class PrintConstructor { /*要拦截哪个类,<init>w为构造函数,*/
@OnMethod(
clazz = "com.example.monitor_tuning.chapter2.User",
method="<init>"
)
/*ProbeClassName 方法类名; ProbeMethodName 方法名 ; AnyType[] 构造函数参数*/
public static void anyRead(@ProbeClassName String pcn, @ProbeMethodName String pmn, AnyType[] args)
{
BTraceUtils.printArray(args);
BTraceUtils.println(pcn + "," + pmn);
BTraceUtils.println();
}
}

  运行btrace脚本

显示结果

二、拦截同名函数

1、创建两个同名的方法

    @RequestMapping("/same1")
public String same(@RequestParam("name")String name){
return "hello," + name;
} @RequestMapping("/same2")
public String same(@RequestParam("id")int id, @RequestParam("name")String name){
return "hello," + name + " id: " + id;
}

  

2、创建btrace脚本

通过参数个数,和顺序进行匹配。

package com.example.monitor_tuning.chapter4;

import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.*; /**
* 监控同名方法
*/ @BTrace
public class PrintSame { @OnMethod(
clazz = "com.example.monitor_tuning.chapter4.Ch4Controller",
method="same"
) public static void anyRead(@ProbeClassName String pcn, @ProbeMethodName String pmn, int id, String name)
{
BTraceUtils.println(pcn + "," + pmn + "," + name + "," + id);
BTraceUtils.println();
} }

  

3、运行btrace脚本

调用接口

http://127.0.0.1:8080/monitor_tuning/ch4/same2?name=nick&id=2

最终显示结果见上图

Btrace 拦截构造函数,同名函数的更多相关文章

  1. 23.C++- 继承的多种方式、显示调用父类构造函数、父子之间的同名函数、virtual虚函数

     上章链接: 22.C++- 继承与组合,protected访问级别 继承方式 继承方式位于定义子类的”:”后面,比如: class Line : public Object //继承方式是publi ...

  2. Qt 学习之路 2(19):事件的接受与忽略(当重写事件回调函数时,时刻注意是否需要通过调用父类的同名函数来确保原有实现仍能进行!有好几个例子。为什么要这么做?而不是自己去手动调用这两个函数呢?因为我们无法确认父类中的这个处理函数有没有额外的操作)

    版本: 2012-09-29 2013-04-23 更新有关accept()和ignore()函数的相关内容. 2013-12-02 增加有关accept()和ignore()函数的示例. 上一章我们 ...

  3. 编译器如何处理C++不同类中同名函数(参数类型个数都相同)

    转载请注明出处,版权归作者所有 lyzaily@126.com yanzhong.lee 作者按: 从这篇文章中,我们主要会认识到一下几点: 一.不类中的特征标相同的同名函数,它们是不同的函数,原因就 ...

  4. (转) C++中基类和派生类之间的同名函数的重载问题

    下面有关派生类与基类中存在同名函数 fn: class A { public: void fn() {} void fn(int a) {} }; class B : public A { publi ...

  5. JS特殊函数(Function()构造函数、函数直接量)区别介绍

    函数定义 函数是由这样的方式进行声明的:关键字 function.函数名.一组参数,以及置于括号中的待执行代码. 函数的构造语法有这三种: 1.function functionName(arg0, ...

  6. C++ 学习笔记 (六) 继承- 子类与父类有同名函数,变量

    学习了类的继承,今天说一下当父类与子类中有同名函数和变量时那么程序将怎么执行.首先明确当基类和子类有同名函数或者变量时,子类依然从父类继承. 举例说明: 例程说明: 父类和子类有同名的成员 data: ...

  7. Function()构造函数与函数直接量

    Function()构造函数与函数直接量 制作人:全心全意 在JavaScript中,除了可使用基本的function语句定义函数之外,还可以使用另外两种方式来定义,即使用Function()构造函数 ...

  8. 【java&c++】父子类中同名函数的覆盖问题

    java和c++两门语言对于父子类中同名函数具有不同的处理方式. 先上两段代码: C++: class Basic { public: void test(string i){ cout <&l ...

  9. C++不同类中的特征标相同的同名函数

    转载请注明出处,版权归作者所有 lyzaily@126.com yanzhong.lee        作者按:                   从这篇文章中,我们主要会认识到一下几点:      ...

随机推荐

  1. python文件(概念、基本操作、常用操作、文本文件的编码方式)

    文件 目标 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 01. 文件的概念 1.1 文件的概念和作用 计算机的 文件,就是存储在某种 长期储存设备 上的一段 数据 长期存储 ...

  2. oracle入门之分页查询

    oracle的分页查询共三种方法 1.根据ROWID来分页(速率一般) SQL>select * from emp where rowid in (select rid from (select ...

  3. [Chrome] 谷歌浏览器开启开发模式仍然无法安装油猴脚本

    右键 > 属性 > 起始位置 > 添加 --enable-easy-off-store-extension-install 谷歌浏览器无法安装油猴脚本:--enable-easy-o ...

  4. vuex数据持久化插件--指定持久化特定的值

    指定需要持久化的state,配置如下 import createPersistedState from "vuex-persistedstate" conststore = new ...

  5. 团队-student_blog-最终程序

    托管平台地址:https://github.com/gengwenhao/student_blog 小组名称:逛逛踹电脑 程序运行方法: 其他附加内容:demo版本:http://blog.gengw ...

  6. CSS效果:动态图标

    HTML: <html lang="en"> <head> <meta charset="UTF-8"> <meta ...

  7. python学习笔记 18-4-11

    一.执行一个简单的代码 1.先创建目录 mkdir /home/dev 2.切换到目录 cd /home/dev 3.在目录下创建文件夹 vim hello.py 4.编辑文件内容 vim hello ...

  8. python 对 sqlite3的简单使用

    SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成.Python就内 ...

  9. python基础语法二

    迭代 test = "妹子有种冲我来" #可迭代对象 == 被for进行循环获取 for item in test: print(item) break #练习题: test = ...

  10. django 单点登录思路-装饰器

    def the_one(func): '''自定义 验唯一证在线 装饰器''' def check_login_status(request): if request.session.get('qq' ...