diff --git a/fine-spring/src/com/fr/third/springframework/aop/aspectj/AspectJAdvisorFactory.java b/fine-spring/src/com/fr/third/springframework/aop/aspectj/AspectJAdvisorFactory.java index eee552b03..791f82ae6 100644 --- a/fine-spring/src/com/fr/third/springframework/aop/aspectj/AspectJAdvisorFactory.java +++ b/fine-spring/src/com/fr/third/springframework/aop/aspectj/AspectJAdvisorFactory.java @@ -79,7 +79,7 @@ public interface AspectJAdvisorFactory { * create a Spring advice in its own right */ Advisor getAdvisor(Method candidateAdviceMethod, - MetadataAwareAspectInstanceFactory aif, int declarationOrderInAspect, String aspectName); + MetadataAwareAspectInstanceFactory aif, int declarationOrderInAspect, String aspectName); /** * Build a Spring AOP Advice for the given AspectJ advice method. @@ -98,6 +98,6 @@ public interface AspectJAdvisorFactory { * @see com.fr.third.aspectj.AspectJAfterThrowingAdvice */ Advice getAdvice(Method candidateAdviceMethod, AspectJExpressionPointcut pointcut, - MetadataAwareAspectInstanceFactory aif, int declarationOrderInAspect, String aspectName); + MetadataAwareAspectInstanceFactory aif, int declarationOrderInAspect, String aspectName); } diff --git a/fine-spring/src/com/fr/third/springframework/aop/aspectj/AspectMetadata.java b/fine-spring/src/com/fr/third/springframework/aop/aspectj/AspectMetadata.java index 4e7f3f0c9..b32855f29 100644 --- a/fine-spring/src/com/fr/third/springframework/aop/aspectj/AspectMetadata.java +++ b/fine-spring/src/com/fr/third/springframework/aop/aspectj/AspectMetadata.java @@ -16,6 +16,7 @@ package com.fr.third.springframework.aop.aspectj; +import com.fr.third.aspectj.lang.annotation.Aspect; import com.fr.third.aspectj.lang.reflect.AjType; import com.fr.third.aspectj.lang.reflect.AjTypeSystem; import com.fr.third.aspectj.lang.reflect.PerClauseKind; @@ -23,7 +24,6 @@ import com.fr.third.aspectj.lang.reflect.PerClauseKind; import com.fr.third.springframework.aop.Pointcut; import com.fr.third.springframework.aop.framework.AopConfigException; import com.fr.third.springframework.aop.support.ComposablePointcut; -import org.aspectj.lang.annotation.Aspect; /** * Metadata for an AspectJ aspect class, with an additional Spring AOP pointcut diff --git a/fine-spring/src/com/fr/third/springframework/aop/aspectj/InstantiationModelAwarePointcutAdvisorImpl.java b/fine-spring/src/com/fr/third/springframework/aop/aspectj/InstantiationModelAwarePointcutAdvisorImpl.java index d18fc2da5..066b4a3a5 100644 --- a/fine-spring/src/com/fr/third/springframework/aop/aspectj/InstantiationModelAwarePointcutAdvisorImpl.java +++ b/fine-spring/src/com/fr/third/springframework/aop/aspectj/InstantiationModelAwarePointcutAdvisorImpl.java @@ -16,24 +16,25 @@ package com.fr.third.springframework.aop.aspectj; +import java.lang.reflect.Method; + +import org.aopalliance.aop.Advice; import com.fr.third.aspectj.lang.reflect.PerClauseKind; + import com.fr.third.springframework.aop.Pointcut; import com.fr.third.springframework.aop.support.DynamicMethodMatcherPointcut; import com.fr.third.springframework.aop.support.Pointcuts; -import org.aopalliance.aop.Advice; - -import java.lang.reflect.Method; /** - * Internal implementation of AspectJPointcutAdvisor. Note that there will be one instance of this - * advisor for each target method. + * Internal implementation of AspectJPointcutAdvisor. + * Note that there will be one instance of this advisor for each target method. * * @author Rod Johnson * @author Juergen Hoeller * @since 2.0 */ class InstantiationModelAwarePointcutAdvisorImpl - implements InstantiationModelAwarePointcutAdvisor, AspectJPrecedenceInformation { + implements InstantiationModelAwarePointcutAdvisor, AspectJPrecedenceInformation { private final AspectJExpressionPointcut declaredPointcut; @@ -57,13 +58,9 @@ class InstantiationModelAwarePointcutAdvisorImpl private Boolean isAfterAdvice; - public InstantiationModelAwarePointcutAdvisorImpl( - AspectJAdvisorFactory af, - AspectJExpressionPointcut ajexp, - MetadataAwareAspectInstanceFactory aif, - Method method, - int declarationOrderInAspect, - String aspectName) { + + public InstantiationModelAwarePointcutAdvisorImpl(AspectJAdvisorFactory af, AspectJExpressionPointcut ajexp, + MetadataAwareAspectInstanceFactory aif, Method method, int declarationOrderInAspect, String aspectName) { this.declaredPointcut = ajexp; this.method = method; @@ -75,16 +72,15 @@ class InstantiationModelAwarePointcutAdvisorImpl if (aif.getAspectMetadata().isLazilyInstantiated()) { // Static part of the pointcut is a lazy type. Pointcut preInstantiationPointcut = - Pointcuts.union(aif.getAspectMetadata().getPerClausePointcut(), this.declaredPointcut); + Pointcuts.union(aif.getAspectMetadata().getPerClausePointcut(), this.declaredPointcut); // Make it dynamic: must mutate from pre-instantiation to post-instantiation state. // If it's not a dynamic pointcut, it may be optimized out // by the Spring AOP infrastructure after the first evaluation. - this.pointcut = - new PerTargetInstantiationModelPointcut( - this.declaredPointcut, preInstantiationPointcut, aif); + this.pointcut = new PerTargetInstantiationModelPointcut(this.declaredPointcut, preInstantiationPointcut, aif); this.lazy = true; - } else { + } + else { // A singleton aspect. this.instantiatedAdvice = instantiateAdvice(this.declaredPointcut); this.pointcut = declaredPointcut; @@ -92,9 +88,10 @@ class InstantiationModelAwarePointcutAdvisorImpl } } + /** - * The pointcut for Spring AOP to use. Actual behaviour of the pointcut will change depending on - * the state of the advice. + * The pointcut for Spring AOP to use. Actual behaviour of the pointcut will change + * depending on the state of the advice. */ @Override public Pointcut getPointcut() { @@ -102,21 +99,25 @@ class InstantiationModelAwarePointcutAdvisorImpl } /** - * This is only of interest for Spring AOP: AspectJ instantiation semantics are much richer. In - * AspectJ terminology, all a return of {@code true} means here is that the aspect is not a - * SINGLETON. + * This is only of interest for Spring AOP: AspectJ instantiation semantics + * are much richer. In AspectJ terminology, all a return of {@code true} + * means here is that the aspect is not a SINGLETON. */ @Override public boolean isPerInstance() { return (getAspectMetadata().getAjType().getPerClause().getKind() != PerClauseKind.SINGLETON); } - /** Return the AspectJ AspectMetadata for this advisor. */ + /** + * Return the AspectJ AspectMetadata for this advisor. + */ public AspectMetadata getAspectMetadata() { return this.aspectInstanceFactory.getAspectMetadata(); } - /** Lazily instantiate advice if necessary. */ + /** + * Lazily instantiate advice if necessary. + */ @Override public synchronized Advice getAdvice() { if (this.instantiatedAdvice == null) { @@ -135,9 +136,10 @@ class InstantiationModelAwarePointcutAdvisorImpl return (this.instantiatedAdvice != null); } + private Advice instantiateAdvice(AspectJExpressionPointcut pcut) { return this.atAspectJAdvisorFactory.getAdvice( - this.method, pcut, this.aspectInstanceFactory, this.declarationOrder, this.aspectName); + this.method, pcut, this.aspectInstanceFactory, this.declarationOrder, this.aspectName); } public MetadataAwareAspectInstanceFactory getAspectInstanceFactory() { @@ -180,15 +182,17 @@ class InstantiationModelAwarePointcutAdvisorImpl } /** - * Duplicates some logic from getAdvice, but importantly does not force creation of the advice. + * Duplicates some logic from getAdvice, but importantly does not force + * creation of the advice. */ private void determineAdviceType() { AbstractAspectJAdvisorFactory.AspectJAnnotation aspectJAnnotation = - AbstractAspectJAdvisorFactory.findAspectJAnnotationOnMethod(this.method); + AbstractAspectJAdvisorFactory.findAspectJAnnotationOnMethod(this.method); if (aspectJAnnotation == null) { this.isBeforeAdvice = false; this.isAfterAdvice = false; - } else { + } + else { switch (aspectJAnnotation.getAnnotationType()) { case AtAfter: case AtAfterReturning: @@ -208,20 +212,20 @@ class InstantiationModelAwarePointcutAdvisorImpl } } + @Override public String toString() { - return "InstantiationModelAwarePointcutAdvisor: expression [" - + getDeclaredPointcut().getExpression() - + "]; advice method [" - + this.method - + "]; perClauseKind=" - + this.aspectInstanceFactory.getAspectMetadata().getAjType().getPerClause().getKind(); + return "InstantiationModelAwarePointcutAdvisor: expression [" + getDeclaredPointcut().getExpression() + + "]; advice method [" + this.method + "]; perClauseKind=" + + this.aspectInstanceFactory.getAspectMetadata().getAjType().getPerClause().getKind(); + } + /** - * Pointcut implementation that changes its behaviour when the advice is instantiated. Note that - * this is a dynamic pointcut. Otherwise it might be optimized out if it does not at first - * match statically. + * Pointcut implementation that changes its behaviour when the advice is instantiated. + * Note that this is a dynamic pointcut. Otherwise it might + * be optimized out if it does not at first match statically. */ private class PerTargetInstantiationModelPointcut extends DynamicMethodMatcherPointcut { @@ -231,24 +235,20 @@ class InstantiationModelAwarePointcutAdvisorImpl private LazySingletonAspectInstanceFactoryDecorator aspectInstanceFactory; - private PerTargetInstantiationModelPointcut( - AspectJExpressionPointcut declaredPointcut, - Pointcut preInstantiationPointcut, - MetadataAwareAspectInstanceFactory aspectInstanceFactory) { + private PerTargetInstantiationModelPointcut(AspectJExpressionPointcut declaredPointcut, + Pointcut preInstantiationPointcut, MetadataAwareAspectInstanceFactory aspectInstanceFactory) { this.declaredPointcut = declaredPointcut; this.preInstantiationPointcut = preInstantiationPointcut; if (aspectInstanceFactory instanceof LazySingletonAspectInstanceFactoryDecorator) { - this.aspectInstanceFactory = - (LazySingletonAspectInstanceFactoryDecorator) aspectInstanceFactory; + this.aspectInstanceFactory = (LazySingletonAspectInstanceFactoryDecorator) aspectInstanceFactory; } } @Override public boolean matches(Method method, Class targetClass) { - // We're either instantiated and matching on declared pointcut, or uninstantiated matching on - // either pointcut - return (isAspectMaterialized() && this.declaredPointcut.matches(method, targetClass)) - || this.preInstantiationPointcut.getMethodMatcher().matches(method, targetClass); + // We're either instantiated and matching on declared pointcut, or uninstantiated matching on either pointcut + return (isAspectMaterialized() && this.declaredPointcut.matches(method, targetClass)) || + this.preInstantiationPointcut.getMethodMatcher().matches(method, targetClass); } @Override @@ -261,4 +261,5 @@ class InstantiationModelAwarePointcutAdvisorImpl return (this.aspectInstanceFactory == null || this.aspectInstanceFactory.isMaterialized()); } } + }