diff options
author | Andy Clement <aclement@gopivotal.com> | 2014-06-11 10:33:12 -0700 |
---|---|---|
committer | Andy Clement <aclement@gopivotal.com> | 2014-06-11 10:33:12 -0700 |
commit | 0cb32f4abac25e989766684b48d1cbd280916ba3 (patch) | |
tree | 06a089c21fd365cef6b9d9dc753a714be7f29159 /tests/bugs181/431976 | |
parent | 4f89239adb00058765f874be1e0800c5d40fa81c (diff) | |
download | aspectj-0cb32f4abac25e989766684b48d1cbd280916ba3.tar.gz aspectj-0cb32f4abac25e989766684b48d1cbd280916ba3.zip |
Fix 431976: avoid uninitialized messages if tjp used in if
Diffstat (limited to 'tests/bugs181/431976')
-rw-r--r-- | tests/bugs181/431976/AbstractDependencyInjectionAspect.aj | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/bugs181/431976/AbstractDependencyInjectionAspect.aj b/tests/bugs181/431976/AbstractDependencyInjectionAspect.aj new file mode 100644 index 000000000..fa8fc6441 --- /dev/null +++ b/tests/bugs181/431976/AbstractDependencyInjectionAspect.aj @@ -0,0 +1,103 @@ +/* + * Copyright 2002-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.beans.factory.aspectj; + +import org.aspectj.lang.annotation.SuppressAjWarnings; +import org.aspectj.lang.annotation.control.CodeGenerationHint; + +/** + * Abstract base aspect that can perform Dependency + * Injection on objects, however they may be created. + * + * @author Ramnivas Laddad + * @since 2.5.2 + */ +public abstract aspect AbstractDependencyInjectionAspect { + /** + * Select construction join points for objects to inject dependencies + */ + public abstract pointcut beanConstruction(Object bean); + + /** + * Select deserialization join points for objects to inject dependencies + */ + public abstract pointcut beanDeserialization(Object bean); + + /** + * Select join points in a configurable bean + */ + public abstract pointcut inConfigurableBean(); + + /** + * Select join points in beans to be configured prior to construction? + * By default, use post-construction injection matching the default in the Configurable annotation. + */ + public pointcut preConstructionConfiguration() : if(false); + + /** + * Select the most-specific initialization join point + * (most concrete class) for the initialization of an instance. + */ + @CodeGenerationHint(ifNameSuffix="6f1") + public pointcut mostSpecificSubTypeConstruction() : + if(thisJoinPoint.getSignature().getDeclaringType() == thisJoinPoint.getThis().getClass()); + + /** + * Select least specific super type that is marked for DI (so that injection occurs only once with pre-construction inejection + */ + public abstract pointcut leastSpecificSuperTypeConstruction(); + + /** + * Configure the bean + */ + public abstract void configureBean(Object bean); + + + private pointcut preConstructionCondition() : + leastSpecificSuperTypeConstruction() && preConstructionConfiguration(); + + private pointcut postConstructionCondition() : + mostSpecificSubTypeConstruction() && !preConstructionConfiguration(); + + /** + * Pre-construction configuration. + */ + @SuppressAjWarnings("adviceDidNotMatch") + before(Object bean) : + beanConstruction(bean) && preConstructionCondition() && inConfigurableBean() { + configureBean(bean); + } + + /** + * Post-construction configuration. + */ + @SuppressAjWarnings("adviceDidNotMatch") + after(Object bean) returning : + beanConstruction(bean) && postConstructionCondition() && inConfigurableBean() { + configureBean(bean); + } + + /** + * Post-deserialization configuration. + */ + @SuppressAjWarnings("adviceDidNotMatch") + after(Object bean) returning : + beanDeserialization(bean) && inConfigurableBean() { + configureBean(bean); + } + +} |