打印特定函数中的所有子方法调用和参数

时间:2017-05-21 02:16:01

标签: java byte-buddy

我试图通过示例,但无法找到一个有形的,以帮助我了解如何跟踪所有方法调用及其在特定方法中的参数(基于elementMatcher)

我想跟踪的方法是getCustomer并打算使用ByteBuddy来获取getCustomer中调用的所有方法的元数据以及访问传递给每个方法的所有参数

例如。想打印出方法

i)customerRepository.findOne,其中customerId值为参数

ii)以客户价值为参数的log.info

依此类推......带有返回值

public Customer getCustomer(@PathVariable("customerId") Long customerId) {

        /* validate customer Id parameter */
        if (null == customerId) {
            throw new InvalidCustomerRequestException();
        }

        Customer customer = customerRepository.findOne(customerId);

        if (null == customer) {
            throw new CustomerNotFoundException();
        }

        log.info("Customer Data is {}", customer);

        try {
            dispatchEventToSalesForce(String.format(" Customer %s Logged into SalesForce", customer));
        } catch (Exception e) {
            log.error("Failed to Dispatch Event to SalesForce . Details {} ", e.getLocalizedMessage());

        }

        return customer;
    }

有人可以帮助我使用Interceptor代码片段,以便我可以按照指示进行操作

1 个答案:

答案 0 :(得分:0)

目前,Byte Buddy并不容易做到这一点。您要查找的组件称为MemberSubstitution,它允许您在方法中替换方法调用和字段访问。您想要做的是添加一个方法调用,捕获当前正在开发的参数作为上述API的附加功能。

或者,如果您知道它们,则可以拦截所有被调用的方法,并浏览堆栈跟踪以验证它们是否从相关方法中调用。