Custom Annotation with Custom Interceptors

Ryan, I would like to request for changes to provide extensibility where we could inject custom interceptors with custom annotations into the metrics framework.

If I want to inject a custom exception for example
public @interface SystemExceptionMetered with the SystemExceptionMethodInterceptor which would catch a bunch of exceptions and increment the meter.

@Override
	protected Object invoke(MethodInvocation invocation, Meter meter, SystemExceptionMetered annotation) throws Throwable {
		try {
			return invocation.proceed();
		}
		catch (SocketTimeOutException t) {
			if (annotation.cause().isAssignableFrom(t.getClass())) {
				meter.mark();
			}
			throw t;
		}
		catch (OutofMemoryException t) {
			if (annotation.cause().isAssignableFrom(t.getClass())) {
				meter.mark();
			}
			throw t;
		}
		catch (IOException t) {
			if (annotation.cause().isAssignableFrom(t.getClass())) {
				meter.mark();
			}
			throw t;
		}
1.This would require AbstractMetricMethodInterceptor to be public
2.add new factory method to MetricsBeanPostProcessorFactory
public static  AdvisingBeanPostProcessor customInterceptorFactoryMethod(
			String interceptorName,MetricRegistry metricRegistry, ProxyConfig proxyConfig) {

		try {
			Class<?> interceptorClass = Class.forName(interceptorName);
			Field field = interceptorClass.getDeclaredField("POINTCUT");
			Pointcut obj1 = (Pointcut) field.get(null);
			Method m1 = interceptorClass.getDeclaredMethod("adviceFactory",
					MetricRegistry.class);
			FTAdviceFactory obj2 = (FTAdviceFactory) m1.invoke(null,
					metricRegistry);
			return new AdvisingBeanPostProcessor(obj1, obj2,
					proxyConfig);}

4. Modify metrics.xsd to include interceptors as optional
<p>
<xsd:sequence>
       <xsd:element id="interceptorNames" ref="util:list" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</p>
so that we can list our interceptors

<p><metrics:annotation-driven metric-registry="myMetrics" >
    <util:list id="interceptorNames" list-class="java.util.ArrayList" >
        <value>SystemExceptionMethodInterceptor</value>
        <value>ClientExceptionMethodInterceptor</value>
    </util:list>
</metrics:annotation-driven>
</p>
Please let me know your thoughts.