You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by al...@apache.org on 2016/08/29 15:46:17 UTC

svn commit: r1758251 - in /aries/trunk/blueprint/blueprint-maven-plugin/src: main/java/org/apache/aries/blueprint/plugin/ main/java/org/apache/aries/blueprint/plugin/javax/ main/java/org/apache/aries/blueprint/plugin/model/ main/java/org/apache/aries/b...

Author: alien11689
Date: Mon Aug 29 15:46:17 2016
New Revision: 1758251

URL: http://svn.apache.org/viewvc?rev=1758251&view=rev
Log:
[ARIES-1602] Use @PostConstruct and @PreDestroy annotations via spi handlers

Added:
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/PostConstructHandler.java
      - copied, changed from r1757990, aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/InjectHandler.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/PreDestroyHandler.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanAnnotationHandler.java
      - copied, changed from r1758211, aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomBeanAnnotationHandler.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanEnricher.java
      - copied, changed from r1758211, aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextEnricher.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/MethodAnnotationHandler.java
      - copied, changed from r1757990, aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanAttributesResolver.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler
      - copied, changed from r1758211, aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler
      - copied, changed from r1757990, aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAttributesResolver
Removed:
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanAttributesResolver.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomBeanAnnotationHandler.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAttributesResolver
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler
Modified:
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Extensions.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spring/DependsOnAttributeResolver.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spring/LazyAttributeResolver.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Extensions.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Extensions.java?rev=1758251&r1=1758250&r2=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Extensions.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Extensions.java Mon Aug 29 15:46:17 2016
@@ -20,12 +20,12 @@ package org.apache.aries.blueprint.plugi
 
 import org.apache.aries.blueprint.plugin.model.AbstractTransactionalFactory;
 import org.apache.aries.blueprint.plugin.model.ExtensionTransactionFactory;
-import org.apache.aries.blueprint.plugin.spi.BeanAttributesResolver;
 import org.apache.aries.blueprint.plugin.spi.BeanFinder;
-import org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler;
+import org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler;
 import org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler;
 import org.apache.aries.blueprint.plugin.spi.CustomFactoryMethodAnnotationHandler;
 import org.apache.aries.blueprint.plugin.spi.InjectLikeHandler;
+import org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler;
 import org.apache.aries.blueprint.plugin.spi.NamedLikeHandler;
 import org.apache.aries.blueprint.plugin.spi.TransactionalFactory;
 import org.apache.aries.blueprint.plugin.spi.ValueInjectionHandler;
@@ -39,13 +39,13 @@ public class Extensions {
     public static final List<Class<? extends Annotation>> beanMarkingAnnotationClasses = new ArrayList<>();
     public static final List<Class<? extends Annotation>> singletons = new ArrayList<>();
     public static final List<AbstractTransactionalFactory> transactionalFactories = new ArrayList<>();
-    public static final List<BeanAttributesResolver> beanAttributesResolvers = new ArrayList<>();
     public static final List<InjectLikeHandler<? extends Annotation>> beanInjectLikeHandlers = new ArrayList<>();
     public static final List<NamedLikeHandler> namedLikeHandlers = new ArrayList<>();
     public static final List<ValueInjectionHandler<? extends Annotation>> valueInjectionHandlers = new ArrayList<>();
-    public static final List<CustomBeanAnnotationHandler<? extends Annotation>> customBeanAnnotationHandlers = new ArrayList<>();
+    public static final List<BeanAnnotationHandler<? extends Annotation>> BEAN_ANNOTATION_HANDLERs = new ArrayList<>();
     public static final List<CustomFactoryMethodAnnotationHandler<? extends Annotation>> customFactoryMethodAnnotationHandlers = new ArrayList<>();
     public static final List<CustomDependencyAnnotationHandler<? extends Annotation>> customDependencyAnnotationHandlers = new ArrayList<>();
+    public static final List<MethodAnnotationHandler<? extends Annotation>> methodAnnotationHandlers = new ArrayList<>();
 
     static {
         for (BeanFinder beanFinder : ServiceLoader.load(BeanFinder.class)) {
@@ -59,10 +59,6 @@ public class Extensions {
             transactionalFactories.add(new ExtensionTransactionFactory(transactionalFactory));
         }
 
-        for (BeanAttributesResolver beanAttributesResolverExtenstion : ServiceLoader.load(BeanAttributesResolver.class)) {
-            beanAttributesResolvers.add(beanAttributesResolverExtenstion);
-        }
-
         for (InjectLikeHandler<? extends Annotation> injectLikeHandler : ServiceLoader.load(InjectLikeHandler.class)) {
             beanInjectLikeHandlers.add(injectLikeHandler);
         }
@@ -75,8 +71,8 @@ public class Extensions {
             valueInjectionHandlers.add(valueInjectionHandler);
         }
 
-        for (CustomBeanAnnotationHandler<? extends Annotation> customBeanAnnotationHandler : ServiceLoader.load(CustomBeanAnnotationHandler.class)) {
-            customBeanAnnotationHandlers.add(customBeanAnnotationHandler);
+        for (BeanAnnotationHandler<? extends Annotation> beanAnnotationHandler : ServiceLoader.load(BeanAnnotationHandler.class)) {
+            BEAN_ANNOTATION_HANDLERs.add(beanAnnotationHandler);
         }
 
         for (CustomFactoryMethodAnnotationHandler<? extends Annotation> customFactoryMethodAnnotationHandler : ServiceLoader.load(CustomFactoryMethodAnnotationHandler.class)) {
@@ -86,5 +82,9 @@ public class Extensions {
         for (CustomDependencyAnnotationHandler<? extends Annotation> customDependencyAnnotationHandler : ServiceLoader.load(CustomDependencyAnnotationHandler.class)) {
             customDependencyAnnotationHandlers.add(customDependencyAnnotationHandler);
         }
+
+        for (MethodAnnotationHandler<? extends Annotation> methodAnnotationHandler : ServiceLoader.load(MethodAnnotationHandler.class)) {
+            methodAnnotationHandlers.add(methodAnnotationHandler);
+        }
     }
 }

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java?rev=1758251&r1=1758250&r2=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java Mon Aug 29 15:46:17 2016
@@ -163,12 +163,6 @@ public class Generator implements Proper
         if (bean instanceof ProducedBean) {
             writeFactory((ProducedBean) bean);
         }
-        if (bean.initMethod != null) {
-            writer.writeAttribute("init-method", bean.initMethod);
-        }
-        if (bean.destroyMethod != null) {
-            writer.writeAttribute("destroy-method", bean.destroyMethod);
-        }
         writer.writeCharacters("\n");
 
         if (namespaces.contains(NS_TX)) {

Copied: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/PostConstructHandler.java (from r1757990, aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/InjectHandler.java)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/PostConstructHandler.java?p2=aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/PostConstructHandler.java&p1=aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/InjectHandler.java&r1=1757990&r2=1758251&rev=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/InjectHandler.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/PostConstructHandler.java Mon Aug 29 15:46:17 2016
@@ -18,13 +18,24 @@
  */
 package org.apache.aries.blueprint.plugin.javax;
 
-import org.apache.aries.blueprint.plugin.spi.InjectLikeHandler;
+import org.apache.aries.blueprint.plugin.spi.BeanEnricher;
+import org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler;
 
-import javax.inject.Inject;
+import javax.annotation.PostConstruct;
+import java.lang.reflect.Method;
+import java.util.List;
 
-public class InjectHandler implements InjectLikeHandler<Inject> {
+public class PostConstructHandler implements MethodAnnotationHandler<PostConstruct> {
     @Override
-    public Class<Inject> getAnnotation() {
-        return Inject.class;
+    public Class<PostConstruct> getAnnotation() {
+        return PostConstruct.class;
+    }
+
+    @Override
+    public void handleMethodAnnotation(Class<?> clazz, List<Method> methods, BeanEnricher beanEnricher) {
+        if(methods.size() > 1){
+            throw new IllegalArgumentException("There can be only one method annotated with @PostConstruct in bean");
+        }
+        beanEnricher.addAttribute("init-method", methods.get(0).getName());
     }
 }

Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/PreDestroyHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/PreDestroyHandler.java?rev=1758251&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/PreDestroyHandler.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/javax/PreDestroyHandler.java Mon Aug 29 15:46:17 2016
@@ -0,0 +1,41 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.aries.blueprint.plugin.javax;
+
+import org.apache.aries.blueprint.plugin.spi.BeanEnricher;
+import org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler;
+
+import javax.annotation.PreDestroy;
+import java.lang.reflect.Method;
+import java.util.List;
+
+public class PreDestroyHandler implements MethodAnnotationHandler<PreDestroy> {
+    @Override
+    public Class<PreDestroy> getAnnotation() {
+        return PreDestroy.class;
+    }
+
+    @Override
+    public void handleMethodAnnotation(Class<?> clazz, List<Method> methods, BeanEnricher beanEnricher) {
+        if(methods.size() > 1){
+            throw new IllegalArgumentException("There can be only one method annotated with @PreDestroy in bean");
+        }
+        beanEnricher.addAttribute("destroy-method", methods.get(0).getName());
+    }
+}

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java?rev=1758251&r1=1758250&r2=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java Mon Aug 29 15:46:17 2016
@@ -19,16 +19,15 @@
 package org.apache.aries.blueprint.plugin.model;
 
 import org.apache.aries.blueprint.plugin.Extensions;
-import org.apache.aries.blueprint.plugin.spi.BeanAttributesResolver;
+import org.apache.aries.blueprint.plugin.spi.BeanEnricher;
 import org.apache.aries.blueprint.plugin.spi.BlueprintWriter;
 import org.apache.aries.blueprint.plugin.spi.ContextEnricher;
-import org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler;
+import org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler;
 import org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler;
 import org.apache.aries.blueprint.plugin.spi.InjectLikeHandler;
+import org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler;
 import org.apache.aries.blueprint.plugin.spi.NamedLikeHandler;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
 import javax.persistence.PersistenceContext;
 import javax.persistence.PersistenceUnit;
 import java.lang.annotation.Annotation;
@@ -47,9 +46,7 @@ import java.util.TreeSet;
 
 import static org.apache.aries.blueprint.plugin.model.AnnotationHelper.findValue;
 
-public class Bean extends BeanRef implements ContextEnricher {
-    public final String initMethod;
-    public String destroyMethod;
+public class Bean extends BeanRef implements ContextEnricher, BeanEnricher {
     public SortedSet<Property> properties = new TreeSet<>();
     public List<Argument> constructorArguments = new ArrayList<>();
     public List<Field> persistenceFields;
@@ -63,9 +60,6 @@ public class Bean extends BeanRef implem
         super(clazz, BeanRef.getBeanName(clazz));
         Introspector introspector = new Introspector(clazz);
 
-        initMethod = findMethodAnnotatedWith(introspector, PostConstruct.class);
-        destroyMethod = findMethodAnnotatedWith(introspector, PreDestroy.class);
-
         interpretTransactionalMethods(clazz);
 
         this.isPrototype = isPrototype(clazz);
@@ -73,24 +67,25 @@ public class Bean extends BeanRef implem
 
         setQualifiersFromAnnotations(clazz.getAnnotations());
 
-        resolveBeanAttributes();
-
         handleCustomBeanAnnotations();
+
+        handleMethodsAnnotation(introspector);
     }
 
-    private void resolveBeanAttributes() {
-        for (BeanAttributesResolver beanAttributesResolver : Extensions.beanAttributesResolvers) {
-            if (clazz.getAnnotation(beanAttributesResolver.getAnnotation()) != null) {
-                attributes.putAll(beanAttributesResolver.resolveAttributes(clazz, clazz));
+    private void handleMethodsAnnotation(Introspector introspector) {
+        for (MethodAnnotationHandler methodAnnotationHandler : Extensions.methodAnnotationHandlers) {
+            List<Method> methods = introspector.methodsWith(methodAnnotationHandler.getAnnotation());
+            if (methods.size() > 0) {
+                methodAnnotationHandler.handleMethodAnnotation(clazz, methods, this);
             }
         }
     }
 
     private void handleCustomBeanAnnotations() {
-        for (CustomBeanAnnotationHandler customBeanAnnotationHandler : Extensions.customBeanAnnotationHandlers) {
-            Object annotation = AnnotationHelper.findAnnotation(clazz.getAnnotations(), customBeanAnnotationHandler.getAnnotation());
+        for (BeanAnnotationHandler beanAnnotationHandler : Extensions.BEAN_ANNOTATION_HANDLERs) {
+            Object annotation = AnnotationHelper.findAnnotation(clazz.getAnnotations(), beanAnnotationHandler.getAnnotation());
             if (annotation != null) {
-                customBeanAnnotationHandler.handleBeanAnnotation(clazz, id, this);
+                beanAnnotationHandler.handleBeanAnnotation(clazz, id, this, this);
             }
         }
     }
@@ -105,14 +100,6 @@ public class Bean extends BeanRef implem
         }
     }
 
-    private String findMethodAnnotatedWith(Introspector introspector, Class<? extends Annotation> annotation) {
-        Method initMethod = introspector.methodWith(annotation);
-        if (initMethod == null) {
-            return null;
-        }
-        return initMethod.getName();
-    }
-
     private boolean isPrototype(Class<?> clazz) {
         return !findSingleton(clazz);
     }
@@ -254,4 +241,9 @@ public class Bean extends BeanRef implem
     public void addBlueprintWriter(String id, BlueprintWriter blueprintWriter) {
         blueprintWriters.put(id, blueprintWriter);
     }
+
+    @Override
+    public void addAttribute(String key, String value) {
+        attributes.put(key, value);
+    }
 }

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java?rev=1758251&r1=1758250&r2=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java Mon Aug 29 15:46:17 2016
@@ -20,7 +20,7 @@ package org.apache.aries.blueprint.plugi
 
 
 import org.apache.aries.blueprint.plugin.Extensions;
-import org.apache.aries.blueprint.plugin.spi.BeanAttributesResolver;
+import org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler;
 
 import java.lang.reflect.Method;
 
@@ -41,13 +41,14 @@ public class ProducedBean extends Bean {
         this.factoryBean = factoryBean;
         this.factoryMethod = factoryMethod.getName();
         this.producingMethod = factoryMethod;
-        resolveBeanAttributes();
+        handleCustomBeanAnnotations();
     }
 
-    private void resolveBeanAttributes() {
-        for (BeanAttributesResolver beanAttributesResolver : Extensions.beanAttributesResolvers) {
-            if (producingMethod.getAnnotation(beanAttributesResolver.getAnnotation()) != null) {
-                attributes.putAll(beanAttributesResolver.resolveAttributes(clazz, producingMethod));
+    private void handleCustomBeanAnnotations() {
+        for (BeanAnnotationHandler beanAnnotationHandler : Extensions.BEAN_ANNOTATION_HANDLERs) {
+            Object annotation = AnnotationHelper.findAnnotation(producingMethod.getAnnotations(), beanAnnotationHandler.getAnnotation());
+            if (annotation != null) {
+                beanAnnotationHandler.handleBeanAnnotation(producingMethod, id, this, this);
             }
         }
     }

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java?rev=1758251&r1=1758250&r2=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/pax/OsgiServiceProviderHandler.java Mon Aug 29 15:46:17 2016
@@ -20,9 +20,10 @@ package org.apache.aries.blueprint.plugi
 
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
+import org.apache.aries.blueprint.plugin.spi.BeanEnricher;
 import org.apache.aries.blueprint.plugin.spi.BlueprintWriter;
 import org.apache.aries.blueprint.plugin.spi.ContextEnricher;
-import org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler;
+import org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler;
 import org.apache.aries.blueprint.plugin.spi.CustomFactoryMethodAnnotationHandler;
 import org.ops4j.pax.cdi.api.OsgiServiceProvider;
 import org.ops4j.pax.cdi.api.Properties;
@@ -35,7 +36,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-public class OsgiServiceProviderHandler implements CustomBeanAnnotationHandler<OsgiServiceProvider>, CustomFactoryMethodAnnotationHandler<OsgiServiceProvider> {
+public class OsgiServiceProviderHandler implements BeanAnnotationHandler<OsgiServiceProvider>, CustomFactoryMethodAnnotationHandler<OsgiServiceProvider> {
     @Override
     public Class<OsgiServiceProvider> getAnnotation() {
         return OsgiServiceProvider.class;
@@ -47,7 +48,7 @@ public class OsgiServiceProviderHandler
     }
 
     @Override
-    public void handleBeanAnnotation(AnnotatedElement annotatedElement, final String id, ContextEnricher contextEnricher) {
+    public void handleBeanAnnotation(AnnotatedElement annotatedElement, final String id, ContextEnricher contextEnricher, BeanEnricher beanEnricher) {
         handleAnnotation(annotatedElement, id, contextEnricher);
     }
 

Copied: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanAnnotationHandler.java (from r1758211, aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomBeanAnnotationHandler.java)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanAnnotationHandler.java?p2=aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanAnnotationHandler.java&p1=aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomBeanAnnotationHandler.java&r1=1758211&r2=1758251&rev=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/CustomBeanAnnotationHandler.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanAnnotationHandler.java Mon Aug 29 15:46:17 2016
@@ -21,8 +21,8 @@ package org.apache.aries.blueprint.plugi
 import java.lang.annotation.Annotation;
 import java.lang.reflect.AnnotatedElement;
 
-public interface CustomBeanAnnotationHandler<A extends Annotation> {
+public interface BeanAnnotationHandler<A extends Annotation> {
     Class<A> getAnnotation();
 
-    void handleBeanAnnotation(AnnotatedElement annotatedElement, String id, ContextEnricher contextEnricher);
+    void handleBeanAnnotation(AnnotatedElement annotatedElement, String id, ContextEnricher contextEnricher, BeanEnricher beanEnricher);
 }

Copied: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanEnricher.java (from r1758211, aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextEnricher.java)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanEnricher.java?p2=aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanEnricher.java&p1=aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextEnricher.java&r1=1758211&r2=1758251&rev=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/ContextEnricher.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanEnricher.java Mon Aug 29 15:46:17 2016
@@ -18,7 +18,6 @@
  */
 package org.apache.aries.blueprint.plugin.spi;
 
-public interface ContextEnricher {
-    void addBean(String id, Class<?> clazz);
-    void addBlueprintWriter(String id, BlueprintWriter blueprintWriter);
+public interface BeanEnricher {
+    void addAttribute(String key, String value);
 }

Copied: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/MethodAnnotationHandler.java (from r1757990, aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanAttributesResolver.java)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/MethodAnnotationHandler.java?p2=aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/MethodAnnotationHandler.java&p1=aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanAttributesResolver.java&r1=1757990&r2=1758251&rev=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/BeanAttributesResolver.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spi/MethodAnnotationHandler.java Mon Aug 29 15:46:17 2016
@@ -19,11 +19,11 @@
 package org.apache.aries.blueprint.plugin.spi;
 
 import java.lang.annotation.Annotation;
-import java.lang.reflect.AnnotatedElement;
-import java.util.Map;
+import java.lang.reflect.Method;
+import java.util.List;
 
-public interface BeanAttributesResolver<A extends Annotation> {
+public interface MethodAnnotationHandler<A extends Annotation> {
     Class<A> getAnnotation();
 
-    Map<String, String> resolveAttributes(Class<?> clazz, AnnotatedElement annotatedElement);
+    void handleMethodAnnotation(Class<?> clazz, List<Method> methods, BeanEnricher beanEnricher);
 }

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spring/DependsOnAttributeResolver.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spring/DependsOnAttributeResolver.java?rev=1758251&r1=1758250&r2=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spring/DependsOnAttributeResolver.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spring/DependsOnAttributeResolver.java Mon Aug 29 15:46:17 2016
@@ -6,9 +6,9 @@
  * to you 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
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
  * 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
@@ -18,30 +18,29 @@
  */
 package org.apache.aries.blueprint.plugin.spring;
 
-import org.apache.aries.blueprint.plugin.spi.BeanAttributesResolver;
+import org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler;
+import org.apache.aries.blueprint.plugin.spi.BeanEnricher;
+import org.apache.aries.blueprint.plugin.spi.ContextEnricher;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.context.annotation.DependsOn;
 
 import java.lang.reflect.AnnotatedElement;
-import java.util.HashMap;
-import java.util.Map;
 
-public class DependsOnAttributeResolver implements BeanAttributesResolver<DependsOn> {
+public class DependsOnAttributeResolver implements BeanAnnotationHandler<DependsOn> {
     @Override
     public Class<DependsOn> getAnnotation() {
         return DependsOn.class;
     }
 
     @Override
-    public Map<String, String> resolveAttributes(Class<?> clazz, AnnotatedElement annotatedElement) {
+    public void handleBeanAnnotation(AnnotatedElement annotatedElement, String id, ContextEnricher contextEnricher, BeanEnricher beanEnricher) {
         DependsOn annotation = annotatedElement.getAnnotation(DependsOn.class);
-        if (annotation == null || annotation.value().length == 0) {
-            return new HashMap<>();
-        }
         String[] value = annotation.value();
+        if (value.length == 0) {
+            return;
+        }
         String dependsOnValue = StringUtils.join(value, " ");
-        Map<String, String> map = new HashMap<>();
-        map.put("depends-on", dependsOnValue);
-        return map;
+        beanEnricher.addAttribute("depends-on", dependsOnValue);
     }
+
 }

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spring/LazyAttributeResolver.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spring/LazyAttributeResolver.java?rev=1758251&r1=1758250&r2=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spring/LazyAttributeResolver.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/spring/LazyAttributeResolver.java Mon Aug 29 15:46:17 2016
@@ -6,9 +6,9 @@
  * to you 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
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
  * 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
@@ -18,24 +18,23 @@
  */
 package org.apache.aries.blueprint.plugin.spring;
 
-import org.apache.aries.blueprint.plugin.spi.BeanAttributesResolver;
+import org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler;
+import org.apache.aries.blueprint.plugin.spi.BeanEnricher;
+import org.apache.aries.blueprint.plugin.spi.ContextEnricher;
 import org.springframework.context.annotation.Lazy;
 
 import java.lang.reflect.AnnotatedElement;
-import java.util.HashMap;
-import java.util.Map;
 
-public class LazyAttributeResolver implements BeanAttributesResolver<Lazy> {
+public class LazyAttributeResolver implements BeanAnnotationHandler<Lazy> {
     @Override
     public Class<Lazy> getAnnotation() {
         return Lazy.class;
     }
 
     @Override
-    public Map<String, String> resolveAttributes(Class<?> clazz, AnnotatedElement annotatedElement) {
+    public void handleBeanAnnotation(AnnotatedElement annotatedElement, String id, ContextEnricher contextEnricher, BeanEnricher beanEnricher) {
         Lazy lazy = annotatedElement.getAnnotation(Lazy.class);
-        Map<String, String> map = new HashMap<>();
-        map.put("activation", lazy.value() ? "lazy" : "eager");
-        return map;
+        beanEnricher.addAttribute("activation", lazy.value() ? "lazy" : "eager");
     }
+
 }

Copied: aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler (from r1758211, aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler?p2=aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler&p1=aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler&r1=1758211&r2=1758251&rev=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.CustomBeanAnnotationHandler (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler Mon Aug 29 15:46:17 2016
@@ -15,4 +15,6 @@
 # limitations under the License.
 #
 
-org.apache.aries.blueprint.plugin.pax.OsgiServiceProviderHandler
\ No newline at end of file
+org.apache.aries.blueprint.plugin.pax.OsgiServiceProviderHandler
+org.apache.aries.blueprint.plugin.spring.LazyAttributeResolver
+org.apache.aries.blueprint.plugin.spring.DependsOnAttributeResolver
\ No newline at end of file

Copied: aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler (from r1757990, aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAttributesResolver)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler?p2=aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler&p1=aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAttributesResolver&r1=1757990&r2=1758251&rev=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAttributesResolver (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler Mon Aug 29 15:46:17 2016
@@ -15,5 +15,5 @@
 # limitations under the License.
 #
 
-org.apache.aries.blueprint.plugin.spring.LazyAttributeResolver
-org.apache.aries.blueprint.plugin.spring.DependsOnAttributeResolver
\ No newline at end of file
+org.apache.aries.blueprint.plugin.javax.PostConstructHandler
+org.apache.aries.blueprint.plugin.javax.PreDestroyHandler
\ No newline at end of file

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java?rev=1758251&r1=1758250&r2=1758251&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java Mon Aug 29 15:46:17 2016
@@ -39,7 +39,6 @@ import java.util.Set;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 public class BeanTest {
@@ -50,8 +49,6 @@ public class BeanTest {
         bean.resolve(new Context());
         assertEquals(MyBean1.class, bean.clazz);
         assertEquals("myBean1", bean.id); // Name derived from class name
-        assertEquals("init", bean.initMethod);
-        assertEquals("destroy", bean.destroyMethod);
         Assert.assertEquals(2, bean.persistenceFields.size());
         assertEquals("em", bean.persistenceFields.get(0).getName());
         assertEquals("emf", bean.persistenceFields.get(1).getName());
@@ -77,8 +74,6 @@ public class BeanTest {
         bean.resolve(new Context());
         assertEquals(MyBean3.class, bean.clazz);
         assertEquals("myBean3", bean.id); // Name derived from class name
-        assertNull("There should be no initMethod", bean.initMethod);
-        assertNull("There should be no destroyMethod", bean.destroyMethod);
         assertEquals("There should be no persistence fields", 0, bean.persistenceFields.size());
         assertEquals(5, bean.properties.size());
         assertTrue(bean.isPrototype);
@@ -100,8 +95,6 @@ public class BeanTest {
         String definedName = ServiceAImpl1.class.getAnnotation(Named.class).value();
         assertEquals("my1", definedName);
         assertEquals("Name should be defined using @Named", definedName, bean.id);
-        assertNull("There should be no initMethod", bean.initMethod);
-        assertNull("There should be no destroyMethod", bean.destroyMethod);
         assertEquals("There should be no persistence fields", 0, bean.persistenceFields.size());
         assertTrue("There should be no transaction definition", bean.transactionDefs.isEmpty());
         assertEquals("There should be no properties", 0, bean.properties.size());
@@ -162,8 +155,6 @@ public class BeanTest {
         bean.resolve(new Context());
         assertEquals(MyBean5.class, bean.clazz);
         assertEquals("myBean5", bean.id); // Name derived from class name
-        assertNull("There should be no initMethod", bean.initMethod);
-        assertNull("There should be no destroyMethod", bean.destroyMethod);
         assertTrue("There should be no persistenceUnit", bean.persistenceFields.isEmpty());
         assertEquals(0, bean.properties.size());
         assertEquals(8, bean.constructorArguments.size());