JBoss.org Community Documentation
Interface introductions can be done using the
@Introduction
annotation.
Only fields within a class annotated with
@Aspect
or
@InterceptorDef
can be annotated with
@Introduction
.
The declaration of
org.jboss.aop.Introduction
:
package org.jboss.aop; @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Introduction { Class target() default java.lang.Class.class; String typeExpression() default ""; Class[] interfaces(); }
The parameters of
@Introduction
are:
target
, the name of the class we want to introduce
an interface to.
typeExpression
, a type expression that should resolve
to one or more classes we want to introduce an interface to.
interfaces
, an array of the interfaces we want to introduce
target
or
typeExpression
has to be specified,
but not both.
This is how to use this annotation:
package com.mypackage; import org.jboss.aop.Introduction; @Aspect (scope = Scope.PER_VM) public class IntroAspect { @Introduction (target=com.blah.SomeClass.class, \ interfaces={java.io.Serializable.class}) public static Object pojoNoInterfacesIntro; }
This means make
com.blah.SomeClass.class
implement the
java.io.Serializable
interface. The equivalent configured
via XML would be:
<introduction class="com.blah.SomeClass.class"> <interfaces> java.io.Serializable </interfaces> </introduction>