Pointcuts

Proxetta pointcuts are defined in pure Java. Pointcut is simple interface: ProxyPointcut with just one method: apply() that should return true if target method is a pointcut and if proxy should wraps it. Since pointcut is written in Java, user may define a pointcut in various ways.

The following example shows the definition of pointcut on all methods that are marked with custom annotation: @Log.

    ProxyPointcut pointcut = new ProxyPointcutSupport() {
        public boolean apply(MethodInfo methidInfo) {
            return lookupAnnotation(methodInfo, Log.class) != null;
        }
    };

Moreover, MethodInfo provides various information about the method: class name and signature, method name, number of arguments, access flag, return type… It also returns ClassInfo and AnnotationInfo instances, with additional class and annotation information. All this information may be use to fine-tune on which methods to apply a proxy. And since all this information is stored as simple types and Strings, pointcut definition becomes easy, but powerful - all in plan Java.

When scanning classes for pointcuts, Proxetta examines all methods of target class and of all its superclasses, up to the Object. Final methods are ignored, since they can't be overridden. Moreover, only public methods of superclasses are available for proxyfication if not overridden.

All class and method information is available as strings (due to bytecode manipulation).

ProxyPointcutSupport

Abstract class ProxyPointcutSupport helps in pointcut definition, since it has implemented several common helper methods, such as for checking if method is public, using wildcard match for method names etc.

Additionally, some common pointcuts are already defined: for all setters (AllSettersPointcut), getters (AllGettersPointcut) and all public methods (AllMethodsPointcut); as well as for all methods annotated with some annotation (MethodAnnotationPointcut).