@Override
    public void before(Object target, Object[] args) {
        if (!validate(target, args)) {
            return;
        }

        if (isDebug) {
            logger.beforeInterceptor(target, args);
        }

        Trace trace = traceContext.currentRawTraceObject();
        if (trace == null) {
            return;
        }

        final AMQP.BasicProperties properties = (AMQP.BasicProperties) args[1];
        final Map<String, Object> headers = createHeader(properties, trace);
        if (headers != null) {
            ((HeadersFieldSetter) properties)._$PINPOINT$_setHeaders(headers);
        }
    }
<p>{@code AMQContentHeader} received as an argument to the constructor is sharable and can be reused, such as
{@code MessageProperties.MINIMAL_BASIC}. Any changes made to it (ie injecting pinpoint headers) may have undesirable
consequences.

<p>Hence, we make a copy via {@code ChannelAspect} and add pinpoint headers to it when propagating trace, and have
{@code AMQCommand} use this.

@author HyunGil Jeong

@see com.navercorp.pinpoint.plugin.rabbitmq.client.aspect.ChannelAspect
agent-module/plugins/rabbitmq/src/main/java/com/navercorp/pinpoint/plugin/rabbitmq/client/interceptor/AMQCommandConstructInterceptor.java