Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id C4D24200AE4 for ; Wed, 11 May 2016 04:41:45 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id C379F160A16; Wed, 11 May 2016 02:41:45 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id E4A8416098A for ; Wed, 11 May 2016 04:41:44 +0200 (CEST) Received: (qmail 81447 invoked by uid 500); 11 May 2016 02:41:44 -0000 Mailing-List: contact commits-help@tamaya.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@tamaya.incubator.apache.org Delivered-To: mailing list commits@tamaya.incubator.apache.org Received: (qmail 81438 invoked by uid 99); 11 May 2016 02:41:44 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 11 May 2016 02:41:44 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id B29A7C023D for ; Wed, 11 May 2016 02:41:43 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -3.221 X-Spam-Level: X-Spam-Status: No, score=-3.221 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.001] autolearn=disabled Received: from mx2-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id P8sH-pw742d0 for ; Wed, 11 May 2016 02:41:42 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx2-lw-eu.apache.org (ASF Mail Server at mx2-lw-eu.apache.org) with SMTP id 2C61960D77 for ; Wed, 11 May 2016 02:41:40 +0000 (UTC) Received: (qmail 81321 invoked by uid 99); 11 May 2016 02:41:40 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 11 May 2016 02:41:40 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id EA150DFFF8; Wed, 11 May 2016 02:41:39 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: anatole@apache.org To: commits@tamaya.incubator.apache.org Date: Wed, 11 May 2016 02:41:41 -0000 Message-Id: <398b8a7e834c43e09a24ed8cb1b274a5@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [3/6] incubator-tamaya git commit: TAMAYA-160: Added support for autoijecting configuration on non annotated classes. archived-at: Wed, 11 May 2016 02:41:45 -0000 TAMAYA-160: Added support for autoijecting configuration on non annotated classes. Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/ef221a7e Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/ef221a7e Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/ef221a7e Branch: refs/heads/master Commit: ef221a7e22fc14d0b0b8d14af3ac2d74dfb567e3 Parents: a03615f Author: anatole Authored: Wed May 11 03:47:20 2016 +0200 Committer: anatole Committed: Wed May 11 03:47:20 2016 +0200 ---------------------------------------------------------------------- .../tamaya/inject/ConfigurationInjector.java | 6 +++- .../inject/internal/ConfiguredTypeImpl.java | 23 +++++++++------- .../internal/DefaultConfigurationInjector.java | 29 +++++++++++++++++--- 3 files changed, 43 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ef221a7e/modules/injection/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java ---------------------------------------------------------------------- diff --git a/modules/injection/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java b/modules/injection/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java index 9a3fe5c..563ae47 100644 --- a/modules/injection/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java +++ b/modules/injection/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java @@ -30,7 +30,9 @@ public interface ConfigurationInjector { /** * Configures the current instance and registers necessary listener to forward config change events as * defined by the current annotations in place. - * + * + * Unannotated types are ignored. + * * @param the type of the instance. * @param instance the instance to be configured * @return the configured instance (allows chaining of operations). @@ -41,6 +43,8 @@ public interface ConfigurationInjector { * Configures the current instance and registers necessary listener to forward config change events as * defined by the current annotations in place. * + * Unannotated types are ignored. + * * @param the type of the instance. * @param instance the instance to be configured * @param config the configuration to be used for injection. http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ef221a7e/modules/injection/src/main/java/org/apache/tamaya/inject/internal/ConfiguredTypeImpl.java ---------------------------------------------------------------------- diff --git a/modules/injection/src/main/java/org/apache/tamaya/inject/internal/ConfiguredTypeImpl.java b/modules/injection/src/main/java/org/apache/tamaya/inject/internal/ConfiguredTypeImpl.java index ecb464c..b40f6c9 100644 --- a/modules/injection/src/main/java/org/apache/tamaya/inject/internal/ConfiguredTypeImpl.java +++ b/modules/injection/src/main/java/org/apache/tamaya/inject/internal/ConfiguredTypeImpl.java @@ -62,18 +62,21 @@ public class ConfiguredTypeImpl implements ConfiguredType{ * * @param type the instance type. */ - public ConfiguredTypeImpl(Class type) { this.type = Objects.requireNonNull(type); - ConfigDefaultSections confType = (ConfigDefaultSections) - type.getAnnotation(ConfigDefaultSections.class); - ConfigAutoInject autoInject = (ConfigAutoInject)type.getAnnotation(ConfigAutoInject.class); - if(confType!=null){ - initFields(type, autoInject!=null); - initMethods(type, autoInject!=null); - }else{ - initFields(type, false); - initMethods(type, false); + if(!isConfigured(type)){ + LOG.info("Auto-Configuring type: " + type.getName()); + initFields(type, true); + initMethods(type, true); + }else { + ConfigAutoInject autoInject = (ConfigAutoInject) type.getAnnotation(ConfigAutoInject.class); + if (autoInject != null) { + initFields(type, autoInject != null); + initMethods(type, autoInject != null); + } else { + initFields(type, false); + initMethods(type, false); + } } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ef221a7e/modules/injection/src/main/java/org/apache/tamaya/inject/internal/DefaultConfigurationInjector.java ---------------------------------------------------------------------- diff --git a/modules/injection/src/main/java/org/apache/tamaya/inject/internal/DefaultConfigurationInjector.java b/modules/injection/src/main/java/org/apache/tamaya/inject/internal/DefaultConfigurationInjector.java index 0795d66..a3a7015 100644 --- a/modules/injection/src/main/java/org/apache/tamaya/inject/internal/DefaultConfigurationInjector.java +++ b/modules/injection/src/main/java/org/apache/tamaya/inject/internal/DefaultConfigurationInjector.java @@ -47,6 +47,8 @@ public final class DefaultConfigurationInjector implements ConfigurationInjector private static final Logger LOG = Logger.getLogger(DefaultConfigurationInjector.class.getName()); + private boolean autoConfigureEnabled = true; + /** * Extract the configuration annotation config and registers it per class, for later reuse. * @@ -55,13 +57,32 @@ public final class DefaultConfigurationInjector implements ConfigurationInjector */ public ConfiguredType registerType(Class type) { ConfiguredType confType = configuredTypes.get(type); - if (confType == null && isConfigured(type)) { + if (confType == null) { + if(!isConfigAnnotated(type) && !autoConfigureEnabled){ + return null; + } confType = new ConfiguredTypeImpl(type); configuredTypes.put(type, confType); InjectionHelper.sendConfigurationEvent(confType); } return confType; -// return configuredTypes.computeIfAbsent(type, ConfigDefaultSections::new); + } + + /** + * If set also non annotated instances can be configured or created as templates. + * @return true, if autoConfigureEnabled. + */ + public boolean isAutoConfigureEnabled(){ + return autoConfigureEnabled; + } + + /** + * Setting to true enables also configuration/templating of non annotated classes or + * interfaces. + * @param enabled true enables also configuration/templating of + */ + public void setAutoConfigureEnabled(boolean enabled){ + this.autoConfigureEnabled = enabled; } /** @@ -69,7 +90,7 @@ public final class DefaultConfigurationInjector implements ConfigurationInjector * @param type the target type, not null. * @return true, if the type, a method or field has Tamaya config annotation on it. */ - private boolean isConfigured(Class type) { + private boolean isConfigAnnotated(Class type) { if(type.getClass().isAnnotationPresent(ConfigDefaultSections.class)){ return true; } @@ -111,7 +132,7 @@ public final class DefaultConfigurationInjector implements ConfigurationInjector if(configuredType!=null){ configuredType.configure(instance, config); }else{ - LOG.info("Instance passed is not annotated for configuration: " + instance); + LOG.info("Instance passed is not configurable: " + instance); } return instance; }