org.jboss.aop
Class AspectManager

java.lang.Object
  extended byorg.jboss.aop.AspectManager
All Implemented Interfaces:
org.jboss.util.loading.Translator
Direct Known Subclasses:
Domain

public class AspectManager
extends Object
implements org.jboss.util.loading.Translator

This singleton class manages all pointcuts and metadata. Coders can access it via the AspectManager.instance() method.

It is also the middle man between the ClassLoader and the actual class instrumentation as well.

App Developers that want to create and apply, interceptors, pointcuts, or metadata at runtime can also use this object to do that.

Version:
$Revision: 1.107 $
Author:
Bill Burke

Field Summary
protected  WeakHashMap advisors
           
protected  LinkedHashMap annotationIntroductions
           
protected  LinkedHashMap annotationOverrides
           
protected  EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap aspectDefinitions
           
protected  LinkedHashMap bindings
           
protected  boolean call
           
protected  EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap cflowStacks
           
static ClassLoaderValidation classLoaderValidator
           
protected  LinkedHashMap classMetaData
           
protected  Hashtable classMetaDataLoaders
           
protected  javassist.ClassPool classpool
           
static ClassPoolFactory classPoolFactory
           
protected  HashMap containers
           
protected  EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap convertableReference
           
protected  HashMap declares
           
protected  EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap dynamicCFlows
           
protected  DynamicAOPStrategy dynamicStrategy
           
protected  ArrayList exclude
           
protected  boolean execution
           
protected  boolean get
           
protected  EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap hasConstructorInterception
           
protected  EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap hasFieldInterception
           
protected  ArrayList include
           
protected  HashMap interceptorFactories
           
protected  HashMap interceptorStacks
           
protected  LinkedHashMap interfaceIntroductions
           
protected static AspectManager manager
           
static AspectNotificationHandler notificationHandler
          This is a callback object that receives events about new pointcuts, interceptors and metadata.
static boolean optimize
           
protected  EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap perVMAspects
           
protected  LinkedHashMap pointcutInfos
           
protected  LinkedHashMap pointcuts
           
protected  LinkedHashMap precedenceDefs
           
static boolean prune
           
protected  HashMap registeredCLs
           
protected  boolean set
           
protected  EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap skipConstructorInterception
           
protected  EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap skipConvertableReference
           
protected  EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap skipFieldInterception
           
protected  PrecedenceDefEntry[] sortedPrecedenceDefEntries
           
static boolean suppressReferenceErrors
          Suppress when a class cannot be found that a class references This may happen if code in a class references something and the class is not in the classpath.
static boolean suppressTransformationErrors
           
protected  boolean transformationStarted
           
protected  LinkedHashMap typedefs
           
protected  HashMap ucl2classes
           
static boolean verbose
          logging switch.
protected  boolean within
           
protected  boolean withincode
           
 
Constructor Summary
AspectManager()
           
 
Method Summary
 void addAdviceStack(AdviceStack stack)
          Add a referencable InterceptorStack( <stack> )
 void addAnnotationIntroduction(AnnotationIntroduction pointcut)
          Register an annotation introduction
 void addAnnotationOverride(AnnotationIntroduction pointcut)
          Register an annotation introduction
 void addAspectDefinition(AspectDefinition def)
           
 void addBinding(AdviceBinding binding)
          Add an interceptor pointcut with a given name
 void addCFlowStack(CFlowStack stack)
           
 void addClassMetaData(ClassMetaDataBinding meta)
           
 void addClassMetaDataLoader(String group, ClassMetaDataLoader loader)
          Every <class-metadata> tag corresponds to a ClassMetaDataLoader.
 void addConstructionInterceptionMarker(String classname)
           
 void addContainer(DomainDefinition def)
           
 void addDeclare(DeclareDef declare)
           
 void addDynamicCFlow(String name, DynamicCFlowDefinition cflow)
           
 void addFieldInterceptionMarker(String classname)
           
 void addInterceptorFactory(String name, InterceptorFactory factory)
          Add an interceptor factory that can be referenced by name.
 void addInterfaceIntroduction(InterfaceIntroduction pointcut)
          Register an introduction pointcut
 void addPointcut(Pointcut pointcut)
          Add an interceptor pointcut with a given name
 void addPrecedence(PrecedenceDef precedenceDef)
           
 void addTypedef(Typedef def)
           
protected  void applyInterfaceIntroductions(Advisor advisor, Class clazz)
           
protected  void applyInterfaceIntroductions(ClassAdvisor advisor, javassist.CtClass clazz)
           
protected  void attachMetaData(ClassAdvisor advisor, Class clazz)
           
protected  boolean attachMetaData(ClassAdvisor advisor, javassist.CtClass clazz, boolean addAdvisor)
           
 void clearUnregisteredClassLoaders()
          This method will check to see if a register classloader has been undeployed (as in JBoss)
 boolean convertReference(String classname)
           
 boolean excludeClass(String classname)
           
 ClassAdvisor findAdvisor(Class clazz)
           
 ClassMetaDataLoader findClassMetaDataLoader(String group)
          Every <class-metadata> tag corresponds to a ClassMetaDataLoader.
 javassist.ClassPool findClassPool(ClassLoader cl)
           
 AdviceStack getAdviceStack(String name)
          Find an interceptor stack referenced by name ( <stack> )
 ClassAdvisor getAdvisor(Class clazz)
          This method is called by the aspectized class when it is loaded This causes all initialization of interceptors for ClassAdvisor
 Advisor getAdvisor(String name)
           
 ClassAdvisor getAdvisorIfAdvised(Class clazz)
           
 Map getAdvisors()
           
 Iterator getAnnotationIntoductions()
           
 Map getAnnotationIntroductions()
           
 Iterator getAnnotationOverrides()
           
 AspectDefinition getAspectDefinition(String name)
           
 Map getAspectDefinitions()
           
 LinkedHashMap getBindings()
           
 CFlowStack getCFlowStack(String name)
           
 Map getCflowStacks()
           
 Map getClassMetaData()
           
 Map getClassMetaDataLoaders()
           
 DomainDefinition getContainer(String name)
           
 Iterator getDeclares()
           
 DynamicAOPStrategy getDynamicAOPStrategy()
          Returns the dynamic aop strategy to be used.
 DynamicCFlow getDynamicCFlow(String name)
           
 Map getDynamicCFlows()
           
 ArrayList getExclude()
           
 ArrayList getInclude()
           
 Map getInterceptorFactories()
           
 InterceptorFactory getInterceptorFactory(String name)
          Find the interceptor factory that can be referenced by name.
 Map getInterceptorStacks()
           
 InterfaceIntroduction getInterfaceIntroduction(String name)
          Retrieve an introduction pointcut of a certain name
 Map getInterfaceIntroductions()
           
 Object getPerVMAspect(AspectDefinition def)
           
 Object getPerVMAspect(String def)
           
 Map getPerVMAspects()
           
 Pointcut getPointcut(String name)
          Find a pointcut of with a given name
 LinkedHashMap getPointcutInfos()
          Returns the PointcutInfo of all registered pointcuts.
 LinkedHashMap getPointcuts()
           
 LinkedHashMap getPrecedenceDefs()
           
 Map getRegisteredCLs()
           
 PrecedenceDefEntry[] getSortedPrecedenceDefEntries()
           
 ClassAdvisor getTempClassAdvisor(javassist.CtClass clazz)
           
 ClassAdvisor getTempClassAdvisorIfNotExist(Class clazz)
           
 Typedef getTypedef(String name)
           
 Map getTypedefs()
           
 boolean includeClass(String classname)
           
static AspectManager instance()
           
 boolean isAdvisorRegistered(Advisor advisor)
          Checks to see if an Advisor represents a class that should have been undeployed.
 boolean isCall()
           
 boolean isExecution()
           
 boolean isGet()
           
 boolean isNonAdvisableClassName(String classname)
           
 boolean isSet()
           
 boolean isWithin()
           
 boolean isWithincode()
           
protected  void registerClass(Class clazz)
           
 javassist.ClassPool registerClassLoader(ClassLoader ucl)
           
 void removeAnnotationIntroduction(AnnotationIntroduction pointcut)
          remove an annotation pointcut
 void removeAnnotationOverride(AnnotationIntroduction pointcut)
          remove an annotation pointcut
 void removeAspectDefinition(String name)
           
 void removeBinding(String name)
          Remove an interceptor pointcut with a given name
 void removeBindings(ArrayList binds)
           
 void removeCFlowStack(String name)
           
 void removeClassMetaData(String name)
           
 void removeClassMetaDataLoader(String group)
          Remove a loader for a given group
 void removeContainer(String name)
           
 void removeDeclare(String name)
           
 void removeDynamicCFlow(String name)
           
 void removeInterceptorFactory(String name)
          Remove an interceptor factory that can be referenced by name.
 void removeInterceptorStack(String name)
          Remove a referencable InterceptorStack( <stack> )
 void removeInterfaceIntroduction(String name)
          remove an introduction pointcut of a certain name
 void removePointcut(String name)
          Remove an interceptor pointcut with a given name
 void removePrecedence(String name)
           
 void removeTypedef(String name)
           
 void setBindings(LinkedHashMap bindings)
           
 void setDynamicAOPStrategy(DynamicAOPStrategy strategy)
          Sets the dynamic aop strategy to be used.
 void setExclude(ArrayList exclude)
           
 void setInclude(ArrayList include)
           
 boolean shouldSkipConstruction(String classname)
           
 boolean shouldSkipFieldAccess(String classname)
           
 void skipConstruction(String classname)
           
 void skipFieldAccess(String classname)
           
 void skipReference(String classname)
           
 byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer)
          This is the hook for ClassLoaders that want to instrument their classes with AOP

This would be called during a findClass or loadClass call.

 byte[] translate(String className, ClassLoader loader)
          This is to be backward compatible with JBoss 3.2.3 Translator interface
 byte[] translate(String className, ClassLoader loader, byte[] classfileBuffer)
          This is to be backward compatible with JBoss 3.2.3 Translator interface
 void unregisterClassLoader(ClassLoader cl)
           
protected  void updatePointcutStats(Pointcut pointcut)
          THis method is used for performance reasons.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

registeredCLs

protected HashMap registeredCLs

ucl2classes

protected HashMap ucl2classes

advisors

protected WeakHashMap advisors

classpool

protected javassist.ClassPool classpool

interfaceIntroductions

protected LinkedHashMap interfaceIntroductions

annotationIntroductions

protected LinkedHashMap annotationIntroductions

annotationOverrides

protected LinkedHashMap annotationOverrides

bindings

protected LinkedHashMap bindings

typedefs

protected LinkedHashMap typedefs

interceptorFactories

protected HashMap interceptorFactories

classMetaDataLoaders

protected Hashtable classMetaDataLoaders

interceptorStacks

protected HashMap interceptorStacks

declares

protected HashMap declares

cflowStacks

protected EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap cflowStacks

dynamicCFlows

protected EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap dynamicCFlows

aspectDefinitions

protected EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap aspectDefinitions

perVMAspects

protected EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap perVMAspects

exclude

protected ArrayList exclude

include

protected ArrayList include

pointcuts

protected LinkedHashMap pointcuts

pointcutInfos

protected LinkedHashMap pointcutInfos

execution

protected boolean execution

call

protected boolean call

within

protected boolean within

get

protected boolean get

set

protected boolean set

withincode

protected boolean withincode

classMetaData

protected LinkedHashMap classMetaData

containers

protected HashMap containers

precedenceDefs

protected LinkedHashMap precedenceDefs

sortedPrecedenceDefEntries

protected PrecedenceDefEntry[] sortedPrecedenceDefEntries

convertableReference

protected EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap convertableReference

hasFieldInterception

protected EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap hasFieldInterception

hasConstructorInterception

protected EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap hasConstructorInterception

skipConvertableReference

protected EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap skipConvertableReference

skipFieldInterception

protected EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap skipFieldInterception

skipConstructorInterception

protected EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap skipConstructorInterception

dynamicStrategy

protected DynamicAOPStrategy dynamicStrategy

transformationStarted

protected boolean transformationStarted

manager

protected static AspectManager manager

optimize

public static boolean optimize

prune

public static boolean prune

classLoaderValidator

public static ClassLoaderValidation classLoaderValidator

verbose

public static boolean verbose
logging switch. We don't use log4j to avoid another heavy library


classPoolFactory

public static ClassPoolFactory classPoolFactory

notificationHandler

public static AspectNotificationHandler notificationHandler
This is a callback object that receives events about new pointcuts, interceptors and metadata. The Aspect Management console hooks into this listener


suppressTransformationErrors

public static boolean suppressTransformationErrors

suppressReferenceErrors

public static boolean suppressReferenceErrors
Suppress when a class cannot be found that a class references This may happen if code in a class references something and the class is not in the classpath.

Constructor Detail

AspectManager

public AspectManager()
Method Detail

addConstructionInterceptionMarker

public void addConstructionInterceptionMarker(String classname)

addFieldInterceptionMarker

public void addFieldInterceptionMarker(String classname)

skipReference

public void skipReference(String classname)

shouldSkipConstruction

public boolean shouldSkipConstruction(String classname)

shouldSkipFieldAccess

public boolean shouldSkipFieldAccess(String classname)

skipConstruction

public void skipConstruction(String classname)

skipFieldAccess

public void skipFieldAccess(String classname)

convertReference

public boolean convertReference(String classname)

instance

public static AspectManager instance()

getPointcuts

public LinkedHashMap getPointcuts()

getPointcutInfos

public LinkedHashMap getPointcutInfos()
Returns the PointcutInfo of all registered pointcuts. Contains useful information for dynamic aop operations.

Returns:
a LinkedHashMap of org.jboss.aop.pointcut.PointcutInfo.
See Also:
org.jboss.aop.Pointcut.PointcutInfo

getCFlowStack

public CFlowStack getCFlowStack(String name)

addCFlowStack

public void addCFlowStack(CFlowStack stack)

removeCFlowStack

public void removeCFlowStack(String name)

getDynamicCFlow

public DynamicCFlow getDynamicCFlow(String name)

addDynamicCFlow

public void addDynamicCFlow(String name,
                            DynamicCFlowDefinition cflow)

removeDynamicCFlow

public void removeDynamicCFlow(String name)

findClassMetaDataLoader

public ClassMetaDataLoader findClassMetaDataLoader(String group)
Every <class-metadata> tag corresponds to a ClassMetaDataLoader. The ClassMetaDataLoader knows how to take arbitrary XML and apply it to SimpleMetaData.

Given a group, return the loader for that group


addClassMetaDataLoader

public void addClassMetaDataLoader(String group,
                                   ClassMetaDataLoader loader)
Every <class-metadata> tag corresponds to a ClassMetaDataLoader. The ClassMetaDataLoader knows how to take arbitrary XML and apply it to SimpleMetaData.

Add a loader for a given group


removeClassMetaDataLoader

public void removeClassMetaDataLoader(String group)
Remove a loader for a given group


getAdvisors

public Map getAdvisors()

getAdvisor

public Advisor getAdvisor(String name)

getBindings

public LinkedHashMap getBindings()

findAdvisor

public ClassAdvisor findAdvisor(Class clazz)

getAdvisorIfAdvised

public ClassAdvisor getAdvisorIfAdvised(Class clazz)

getAdvisor

public ClassAdvisor getAdvisor(Class clazz)
This method is called by the aspectized class when it is loaded This causes all initialization of interceptors for ClassAdvisor

Parameters:
clazz -
Returns:

getRegisteredCLs

public Map getRegisteredCLs()

clearUnregisteredClassLoaders

public void clearUnregisteredClassLoaders()
This method will check to see if a register classloader has been undeployed (as in JBoss)


isAdvisorRegistered

public boolean isAdvisorRegistered(Advisor advisor)
Checks to see if an Advisor represents a class that should have been undeployed.

Parameters:
advisor -
Returns:

findClassPool

public javassist.ClassPool findClassPool(ClassLoader cl)

registerClassLoader

public javassist.ClassPool registerClassLoader(ClassLoader ucl)

registerClass

protected void registerClass(Class clazz)

unregisterClassLoader

public void unregisterClassLoader(ClassLoader cl)
Specified by:
unregisterClassLoader in interface org.jboss.util.loading.Translator

getExclude

public ArrayList getExclude()

setExclude

public void setExclude(ArrayList exclude)

getInclude

public ArrayList getInclude()

setInclude

public void setInclude(ArrayList include)

includeClass

public boolean includeClass(String classname)

excludeClass

public boolean excludeClass(String classname)

isNonAdvisableClassName

public boolean isNonAdvisableClassName(String classname)

transform

public byte[] transform(ClassLoader loader,
                        String className,
                        Class classBeingRedefined,
                        ProtectionDomain protectionDomain,
                        byte[] classfileBuffer)
                 throws Exception
This is the hook for ClassLoaders that want to instrument their classes with AOP

This would be called during a findClass or loadClass call. The return value is used by defineClass to create the class from bytecode

Specified by:
transform in interface org.jboss.util.loading.Translator
Throws:
Exception

translate

public byte[] translate(String className,
                        ClassLoader loader)
                 throws Exception
This is to be backward compatible with JBoss 3.2.3 Translator interface

Parameters:
className -
loader -
Returns:
Throws:
Exception

translate

public byte[] translate(String className,
                        ClassLoader loader,
                        byte[] classfileBuffer)
                 throws Exception
This is to be backward compatible with JBoss 3.2.3 Translator interface

Parameters:
className -
loader -
Returns:
Throws:
Exception

addInterceptorFactory

public void addInterceptorFactory(String name,
                                  InterceptorFactory factory)
Add an interceptor factory that can be referenced by name.


removeInterceptorFactory

public void removeInterceptorFactory(String name)
Remove an interceptor factory that can be referenced by name.


getInterceptorFactories

public Map getInterceptorFactories()

getInterceptorFactory

public InterceptorFactory getInterceptorFactory(String name)
Find the interceptor factory that can be referenced by name.


addPrecedence

public void addPrecedence(PrecedenceDef precedenceDef)

removePrecedence

public void removePrecedence(String name)

getPrecedenceDefs

public LinkedHashMap getPrecedenceDefs()

getSortedPrecedenceDefEntries

public PrecedenceDefEntry[] getSortedPrecedenceDefEntries()

addAdviceStack

public void addAdviceStack(AdviceStack stack)
Add a referencable InterceptorStack( <stack> )


removeInterceptorStack

public void removeInterceptorStack(String name)
Remove a referencable InterceptorStack( <stack> )


getAdviceStack

public AdviceStack getAdviceStack(String name)
Find an interceptor stack referenced by name ( <stack> )


attachMetaData

protected boolean attachMetaData(ClassAdvisor advisor,
                                 javassist.CtClass clazz,
                                 boolean addAdvisor)
                          throws Exception
Throws:
Exception

attachMetaData

protected void attachMetaData(ClassAdvisor advisor,
                              Class clazz)

getTempClassAdvisor

public ClassAdvisor getTempClassAdvisor(javassist.CtClass clazz)
                                 throws Exception
Throws:
Exception

getTempClassAdvisorIfNotExist

public ClassAdvisor getTempClassAdvisorIfNotExist(Class clazz)

getContainer

public DomainDefinition getContainer(String name)

addContainer

public void addContainer(DomainDefinition def)

removeContainer

public void removeContainer(String name)

getPointcut

public Pointcut getPointcut(String name)
Find a pointcut of with a given name


removePointcut

public void removePointcut(String name)
Remove an interceptor pointcut with a given name


addPointcut

public void addPointcut(Pointcut pointcut)
Add an interceptor pointcut with a given name


updatePointcutStats

protected void updatePointcutStats(Pointcut pointcut)
THis method is used for performance reasons.

Parameters:
pointcut -

isExecution

public boolean isExecution()

isCall

public boolean isCall()

isWithin

public boolean isWithin()

isWithincode

public boolean isWithincode()

isGet

public boolean isGet()

isSet

public boolean isSet()

removeBinding

public void removeBinding(String name)
Remove an interceptor pointcut with a given name


removeBindings

public void removeBindings(ArrayList binds)

addBinding

public void addBinding(AdviceBinding binding)
Add an interceptor pointcut with a given name


removeClassMetaData

public void removeClassMetaData(String name)

addClassMetaData

public void addClassMetaData(ClassMetaDataBinding meta)

getInterfaceIntroduction

public InterfaceIntroduction getInterfaceIntroduction(String name)
Retrieve an introduction pointcut of a certain name


addInterfaceIntroduction

public void addInterfaceIntroduction(InterfaceIntroduction pointcut)
Register an introduction pointcut


removeInterfaceIntroduction

public void removeInterfaceIntroduction(String name)
remove an introduction pointcut of a certain name


addAnnotationIntroduction

public void addAnnotationIntroduction(AnnotationIntroduction pointcut)
Register an annotation introduction


removeAnnotationIntroduction

public void removeAnnotationIntroduction(AnnotationIntroduction pointcut)
remove an annotation pointcut


getAnnotationIntoductions

public Iterator getAnnotationIntoductions()

addDeclare

public void addDeclare(DeclareDef declare)

removeDeclare

public void removeDeclare(String name)

getDeclares

public Iterator getDeclares()

applyInterfaceIntroductions

protected void applyInterfaceIntroductions(Advisor advisor,
                                           Class clazz)

applyInterfaceIntroductions

protected void applyInterfaceIntroductions(ClassAdvisor advisor,
                                           javassist.CtClass clazz)
                                    throws Exception
Throws:
Exception

addAnnotationOverride

public void addAnnotationOverride(AnnotationIntroduction pointcut)
Register an annotation introduction


removeAnnotationOverride

public void removeAnnotationOverride(AnnotationIntroduction pointcut)
remove an annotation pointcut


getAnnotationOverrides

public Iterator getAnnotationOverrides()

getPerVMAspect

public Object getPerVMAspect(AspectDefinition def)

getPerVMAspect

public Object getPerVMAspect(String def)

addAspectDefinition

public void addAspectDefinition(AspectDefinition def)

removeAspectDefinition

public void removeAspectDefinition(String name)

getAspectDefinitions

public Map getAspectDefinitions()

getAspectDefinition

public AspectDefinition getAspectDefinition(String name)

addTypedef

public void addTypedef(Typedef def)
                throws Exception
Throws:
Exception

removeTypedef

public void removeTypedef(String name)

getTypedef

public Typedef getTypedef(String name)

getInterfaceIntroductions

public Map getInterfaceIntroductions()

getAnnotationIntroductions

public Map getAnnotationIntroductions()

getTypedefs

public Map getTypedefs()

getInterceptorStacks

public Map getInterceptorStacks()

getClassMetaDataLoaders

public Map getClassMetaDataLoaders()

getCflowStacks

public Map getCflowStacks()

getDynamicCFlows

public Map getDynamicCFlows()

getPerVMAspects

public Map getPerVMAspects()

getClassMetaData

public Map getClassMetaData()

getDynamicAOPStrategy

public DynamicAOPStrategy getDynamicAOPStrategy()
Returns the dynamic aop strategy to be used.


setDynamicAOPStrategy

public void setDynamicAOPStrategy(DynamicAOPStrategy strategy)
Sets the dynamic aop strategy to be used. Should be called only before any class is transformed.

Parameters:
strategy - the new dynamic aop strategy.

setBindings

public void setBindings(LinkedHashMap bindings)


Copyright © 2002 JBoss Group, LLC. All Rights Reserved.