JBoss.org Community Documentation
To use a typedef, you annotate a field with
@TypeDef
in a class anotated with
@Aspect
or
@InterceptorDef
.
The declaration of
org.jboss.aop.TypeDef
:
package org.jboss.aop; @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface TypeDef { String value(); }
The single
value
field takes a type expression that
resolves to one or more classes. The name of the typedef used for reference
and internally is:
<name of @Aspect/@InterceptorDef annotated class>.<name of @TypeDef annotated field>
Here's how to use it:
package com.mypackage; import org.jboss.aop.TypeDef; import org.jboss.aop.pointcut.Typedef; @Aspect (scope=org.jboss.aop.advice.Scope.PER_VM) public class TypedefAspect { @TypeDef ("class(com.blah.POJO)") public static Typedef myTypedef; @Bind (pointcut="execution(* \ $typedef{com.mypackage.TypedefAspect.myTypedef}->methodWithTypedef())") public Object typedefAdvice(Invocation invocation) throws Throwable { return invocation.invokeNext(); } }
The equivalent using XML configuration would be:
<aop> <aspect class="com.mypackage.TypedefAspect" scope="PER>VM"/> <typedef name="com.mypackage.TypedefAspect.myTypedef" expr="class(com.blah.POJO)"/> <bind pointcut="execution(* \ $typedef{com.mypackage.TypedefAspect.myTypedef}->methodWithTypedef())" > <advice name="typedefAdvice" aspect="com.mypackage.TypedefAspect"/> </bind> </aop>