拦截方法:

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

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

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

一、拦截构造函数

1、创建接口

  1. @RequestMapping("/constructor")
  2. public User constructor(User user){
  3. return user;
  4. }

  

2、测试接口

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

3、查看进程

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

  1. package com.example.monitor_tuning.chapter4;
  2.  
  3. import com.sun.btrace.AnyType;
  4. import com.sun.btrace.BTraceUtils;
  5. import com.sun.btrace.annotations.*;
  6.  
  7. /**
  8. * 拦截构造函数.
  9. */
  10. @BTrace
  11. public class PrintConstructor {
  12.  
  13. /*要拦截哪个类,<init>w为构造函数,*/
  14. @OnMethod(
  15. clazz = "com.example.monitor_tuning.chapter2.User",
  16. method="<init>"
  17. )
  18. /*ProbeClassName 方法类名; ProbeMethodName 方法名 ; AnyType[] 构造函数参数*/
  19. public static void anyRead(@ProbeClassName String pcn, @ProbeMethodName String pmn, AnyType[] args)
  20. {
  21. BTraceUtils.printArray(args);
  22. BTraceUtils.println(pcn + "," + pmn);
  23. BTraceUtils.println();
  24. }
  25. }

  运行btrace脚本

显示结果

二、拦截同名函数

1、创建两个同名的方法

  1. @RequestMapping("/same1")
  2. public String same(@RequestParam("name")String name){
  3. return "hello," + name;
  4. }
  5.  
  6. @RequestMapping("/same2")
  7. public String same(@RequestParam("id")int id, @RequestParam("name")String name){
  8. return "hello," + name + " id: " + id;
  9. }

  

2、创建btrace脚本

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

  1. package com.example.monitor_tuning.chapter4;
  2.  
  3. import com.sun.btrace.BTraceUtils;
  4. import com.sun.btrace.annotations.*;
  5.  
  6. /**
  7. * 监控同名方法
  8. */
  9.  
  10. @BTrace
  11. public class PrintSame {
  12.  
  13. @OnMethod(
  14. clazz = "com.example.monitor_tuning.chapter4.Ch4Controller",
  15. method="same"
  16. )
  17.  
  18. public static void anyRead(@ProbeClassName String pcn, @ProbeMethodName String pmn, int id, String name)
  19. {
  20. BTraceUtils.println(pcn + "," + pmn + "," + name + "," + id);
  21. BTraceUtils.println();
  22. }
  23.  
  24. }

  

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. Problem B: 一切皆对象

    Description 一切都是对象 —— Everything is an object. 所以,现在定义一个类Thing,来描述世界上所有有名字的事物.该类只有构造函数.拷贝构造函数和析构函数,并 ...

  2. P2886 [USACO07NOV]牛继电器Cow Relays

    题目描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...

  3. Nim函数调用的几种形式

    Nim函数调用的几种形式 Nim 转载条件:如果你需要转载本文,你需要做到完整转载本文所有的内容,不得删改文内的作者名字与链接.否则拒绝转载. 关于nim的例行介绍: Nim 是一门静态编译型的系统级 ...

  4. elasticsearch(4) 轻量搜索

    一 空搜索 搜索API的最基础的形式是没有指定任何查询的空搜索 ,它简单地返回集群中所有索引下的所有文档: 示例 GET 127.0.0.1:9200/_search 响应 { , "tim ...

  5. Java连接Oracle12c

  6. JavaScript中Ajax的用法

    XMLHttpRequest 对象的属性和方法: open(method,url,async) 规定请求的类型.URL 以及是否异步处理请求 send(string)   将请求发送到服务器. res ...

  7. C#获取常用的路径

    常用的这两个足够了,其他需要的自行百度 //获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名). string str = System.Diagnost ...

  8. mysql知识点拾遗梳理

    mysql卸载重装过程: sudo apache2ctl stop sudo apt-get --purge remove mysql-client mysql-server mysql-common ...

  9. 第二次scrum冲刺

    一.第二次冲刺任务         Scrum是在已有的基础上实现读者查询书籍的功能. 二.用户故事         用户输入账号.密码   用户输入需要查询的书籍   系统显示用户输入的信息的详细信 ...

  10. dos4章

    批处理中的变量,我把他分为两类,分别为"系统变量"和"自定义变量" 我们现在来详解这两个变量! 一.系统变量 他们的值由系统将其根据事先定义的条件自动赋值,也就 ...