public abstract class AbstractAspectJAdvisorFactory extends java.lang.Object implements AspectJAdvisorFactory
This class handles annotation parsing and validation functionality. It does not actually generate Spring AOP Advisors, which is deferred to subclasses.
Modifier and Type | Class and Description |
---|---|
protected static class |
AbstractAspectJAdvisorFactory.AspectJAnnotation<A extends java.lang.annotation.Annotation>
Class modelling an AspectJ annotation, exposing its type enumeration and
pointcut String.
|
private static class |
AbstractAspectJAdvisorFactory.AspectJAnnotationParameterNameDiscoverer
ParameterNameDiscoverer implementation that analyzes the arg names
specified at the AspectJ annotation level.
|
protected static class |
AbstractAspectJAdvisorFactory.AspectJAnnotationType |
Modifier and Type | Field and Description |
---|---|
private static java.lang.String |
AJC_MAGIC |
protected Log |
logger
Logger available to subclasses
|
protected ParameterNameDiscoverer |
parameterNameDiscoverer |
Constructor and Description |
---|
AbstractAspectJAdvisorFactory() |
Modifier and Type | Method and Description |
---|---|
private boolean |
compiledByAjc(java.lang.Class<?> clazz)
We need to detect this as "code-style" AspectJ aspects should not be
interpreted by Spring AOP.
|
protected AspectJExpressionPointcut |
createPointcutExpression(java.lang.reflect.Method annotatedMethod,
java.lang.Class<?> declarationScope,
java.lang.String[] pointcutParameterNames)
The pointcut and advice annotations both have an "argNames" member which contains a
comma-separated list of the argument names.
|
private java.lang.Class<?>[] |
extractPointcutParameterTypes(java.lang.String[] argNames,
java.lang.reflect.Method adviceMethod)
Create the pointcut parameters needed by aspectj based on the given argument names
and the argument types that are available from the adviceMethod.
|
private static <A extends java.lang.annotation.Annotation> |
findAnnotation(java.lang.reflect.Method method,
java.lang.Class<A> toLookFor) |
protected static AbstractAspectJAdvisorFactory.AspectJAnnotation<?> |
findAspectJAnnotationOnMethod(java.lang.reflect.Method method)
Find and return the first AspectJ annotation on the given method
(there should only be one anyway...)
|
private boolean |
hasAspectAnnotation(java.lang.Class<?> clazz) |
boolean |
isAspect(java.lang.Class<?> clazz)
We consider something to be an AspectJ aspect suitable for use by the Spring AOP system
if it has the @Aspect annotation, and was not compiled by ajc.
|
void |
validate(java.lang.Class<?> aspectClass)
Is the given class a valid AspectJ aspect class?
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getAdvice, getAdvisor, getAdvisors
private static final java.lang.String AJC_MAGIC
protected final Log logger
protected final ParameterNameDiscoverer parameterNameDiscoverer
public boolean isAspect(java.lang.Class<?> clazz)
isAspect
in interface AspectJAdvisorFactory
clazz
- the supposed annotation-style AspectJ classprivate boolean hasAspectAnnotation(java.lang.Class<?> clazz)
private boolean compiledByAjc(java.lang.Class<?> clazz)
public void validate(java.lang.Class<?> aspectClass) throws AopConfigException
AspectJAdvisorFactory
validate
in interface AspectJAdvisorFactory
aspectClass
- the supposed AspectJ annotation-style class to validateAopConfigException
- if the class is an invalid aspect
(which can never be legal)NotAnAtAspectException
- if the class is not an aspect at all
(which may or may not be legal, depending on the context)protected AspectJExpressionPointcut createPointcutExpression(java.lang.reflect.Method annotatedMethod, java.lang.Class<?> declarationScope, java.lang.String[] pointcutParameterNames)
private java.lang.Class<?>[] extractPointcutParameterTypes(java.lang.String[] argNames, java.lang.reflect.Method adviceMethod)
protected static AbstractAspectJAdvisorFactory.AspectJAnnotation<?> findAspectJAnnotationOnMethod(java.lang.reflect.Method method)
private static <A extends java.lang.annotation.Annotation> AbstractAspectJAdvisorFactory.AspectJAnnotation<A> findAnnotation(java.lang.reflect.Method method, java.lang.Class<A> toLookFor)