Author: jochen Date: Wed Dec 17 12:48:19 2014 New Revision: 1646221 URL: http://svn.apache.org/r1646221 Log: - Removing Guice as a dependency. - Adding Javadocs.
Modified: commons/sandbox/commons-inject/trunk/pom.xml commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IKey.java commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleController.java commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleListener.java commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IPoint.java commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IProvider.java commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/InjLogger.java commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Key.java commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/ILinkedBindingBuilder.java commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractScopedProvider.java commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/bind/DefaultBindingBuilder.java commons/sandbox/commons-inject/trunk/src/site/apt/index.apt Modified: commons/sandbox/commons-inject/trunk/pom.xml URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/pom.xml?rev=1646221&r1=1646220&r2=1646221&view=diff ============================================================================== --- commons/sandbox/commons-inject/trunk/pom.xml (original) +++ commons/sandbox/commons-inject/trunk/pom.xml Wed Dec 17 12:48:19 2014 @@ -148,11 +148,6 @@ <scope>test</scope> </dependency> <dependency> - <groupId>com.google.inject</groupId> - <artifactId>guice</artifactId> - <version>4.0-beta5</version> - </dependency> - <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> Modified: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IKey.java URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IKey.java?rev=1646221&r1=1646220&r2=1646221&view=diff ============================================================================== --- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IKey.java (original) +++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IKey.java Wed Dec 17 12:48:19 2014 @@ -19,7 +19,8 @@ package org.apache.commons.inject.api; import java.lang.annotation.Annotation; /** - * A binding key is used to query objects + * Binding key consisting of an injection type and an optional annotation. + * Matches the type and annotation at a point of injection. */ public interface IKey<T> { Class<T> getType(); Modified: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleController.java URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleController.java?rev=1646221&r1=1646220&r2=1646221&view=diff ============================================================================== --- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleController.java (original) +++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleController.java Wed Dec 17 12:48:19 2014 @@ -16,6 +16,18 @@ */ package org.apache.commons.inject.api; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + + +/** + * Interface of an object, which is used by the {@link PostConstructModule}. + * The module adds binding listeners, which ensure that objects annotated + * with {@link PostConstruct}, or {@link PreDestroy}, are being added to + * the lifecycle listener via {@link #add(ILifecycleListener)}. It is the + * users responsibility to invoke {@link #start()}, when the injector has + * been created, and {@link #shutdown()}, when the application terminates. + */ public interface ILifecycleController extends ILifecycleListener { boolean add(ILifecycleListener pListener); boolean remove(ILifecycleListener pListener); Modified: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleListener.java URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleListener.java?rev=1646221&r1=1646220&r2=1646221&view=diff ============================================================================== --- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleListener.java (original) +++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleListener.java Wed Dec 17 12:48:19 2014 @@ -16,6 +16,16 @@ */ package org.apache.commons.inject.api; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +/** Interface of an object, which can be managed by the + * {@link ILifecycleController}. The {@link PostConstructModule} + * detects objects annotated with {@link PostConstruct}, and + * {@link PreDestroy}, wraps them in an instance of + * {@link ILifecycleListener}, which delegates to the respective + * methods, and adds the wrappers to the lifecycle controller. + */ public interface ILifecycleListener { void start(); void shutdown(); Modified: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IPoint.java URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IPoint.java?rev=1646221&r1=1646220&r2=1646221&view=diff ============================================================================== --- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IPoint.java (original) +++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IPoint.java Wed Dec 17 12:48:19 2014 @@ -16,6 +16,19 @@ */ package org.apache.commons.inject.api; +import org.apache.commons.inject.api.bind.IBinder; +import org.apache.commons.inject.api.bind.IModule; + + +/** + * A point implements injection of values into a field, or method. + * Of course, several points may be combined into more complex points, + * etc. + * {@link IModule modules} may inject additional values by implementing + * {@link IBinder.InjectionParticipator} and adding listeners via + * {@link IBinder#add(org.apache.commons.inject.api.bind.IBinder.IInjectionParticipator)}. + * This is done, for example, by the {@link AbstractLoggerInjectingModule}. + */ public interface IPoint<T> { void injectTo(T pInstance, IInjector pInjector); } Modified: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IProvider.java URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IProvider.java?rev=1646221&r1=1646220&r2=1646221&view=diff ============================================================================== --- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IProvider.java (original) +++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IProvider.java Wed Dec 17 12:48:19 2014 @@ -18,6 +18,11 @@ package org.apache.commons.inject.api; import javax.inject.Provider; +import org.apache.commons.inject.api.bind.IModule; + +/** + * An object factory, which may be supplied by the {@link IModule module}. + */ public interface IProvider<T> extends Provider<T> { Class<? extends T> getType(); T get(IInjector pInjector); Modified: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/InjLogger.java URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/InjLogger.java?rev=1646221&r1=1646220&r2=1646221&view=diff ============================================================================== --- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/InjLogger.java (original) +++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/InjLogger.java Wed Dec 17 12:48:19 2014 @@ -19,6 +19,15 @@ package org.apache.commons.inject.api; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import javax.inject.Inject; + +/** + * Proprietary variant of {@link Inject}, which is supported by the + * {@link AbstractLoggerInjectingModule}, and its subclasses, to + * inject loggers. By default, the logger Id is the name of the + * class, which owns the annotated field. However, that default + * can be overwritten using {@link #id()}. + */ @Retention(RetentionPolicy.RUNTIME) public @interface InjLogger { String id() default ""; Modified: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Key.java URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Key.java?rev=1646221&r1=1646220&r2=1646221&view=diff ============================================================================== --- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Key.java (original) +++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Key.java Wed Dec 17 12:48:19 2014 @@ -19,6 +19,9 @@ package org.apache.commons.inject.api; import java.lang.annotation.Annotation; import java.lang.reflect.Array; +/** + * Default implementation of {@link IKey}. + */ public class Key<T> implements IKey<T> { public static final String NO_NAME = ""; public static final Annotation[] NO_ANNOTATIONS = (Annotation[]) Array.newInstance(Annotation.class, 0); Modified: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/ILinkedBindingBuilder.java URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/ILinkedBindingBuilder.java?rev=1646221&r1=1646220&r2=1646221&view=diff ============================================================================== --- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/ILinkedBindingBuilder.java (original) +++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/ILinkedBindingBuilder.java Wed Dec 17 12:48:19 2014 @@ -21,7 +21,7 @@ import java.lang.reflect.Method; import org.apache.commons.inject.api.IProvider; -import com.google.inject.Provider; +import javax.inject.Provider; /** * A binding builder, which allows to specify a bindings target: A Modified: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractScopedProvider.java URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractScopedProvider.java?rev=1646221&r1=1646220&r2=1646221&view=diff ============================================================================== --- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractScopedProvider.java (original) +++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractScopedProvider.java Wed Dec 17 12:48:19 2014 @@ -19,6 +19,11 @@ package org.apache.commons.inject.impl; import org.apache.commons.inject.api.IInjector; import org.apache.commons.inject.api.IProvider; +/** + * Abstract base class for providers, which handle scopes. + * The details of instantiation and value injection are left to the + * {@link AbstractBaseProvider}. + */ public abstract class AbstractScopedProvider<T> implements IProvider<T>, IInjectorAware { private final IProvider<T> baseProvider; private IInjector injector; Modified: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/bind/DefaultBindingBuilder.java URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/bind/DefaultBindingBuilder.java?rev=1646221&r1=1646220&r2=1646221&view=diff ============================================================================== --- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/bind/DefaultBindingBuilder.java (original) +++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/bind/DefaultBindingBuilder.java Wed Dec 17 12:48:19 2014 @@ -41,7 +41,7 @@ import org.apache.commons.inject.impl.Li import org.apache.commons.inject.impl.MutableBindingSet; import org.apache.commons.inject.impl.AbstractBindingSet.MappedKey; -import com.google.inject.Provider; +import javax.inject.Provider; /** Modified: commons/sandbox/commons-inject/trunk/src/site/apt/index.apt URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/site/apt/index.apt?rev=1646221&r1=1646220&r2=1646221&view=diff ============================================================================== --- commons/sandbox/commons-inject/trunk/src/site/apt/index.apt (original) +++ commons/sandbox/commons-inject/trunk/src/site/apt/index.apt Wed Dec 17 12:48:19 2014 @@ -49,14 +49,18 @@ * Commons Inject is based on the standard Java reflection API <<only>>. As a consequence, it should work on Android. + * Commons Inject doesn't distinguish between production mode, and development mode. OTOH, its startup time should be <<much>> faster than Guice in production mode. + * Commons Inject provides some extensions out of the box: + * Support for an {{{./lifecycle.html}Application Lifecycle}}, including support for {{{http://docs.oracle.com/javaee/5/api/javax/annotation/PostConstruct.html}@PostConstruct}}, and {{{http://docs.oracle.com/javaee/5/api/javax/annotation/PreDestroy.html}@PreDestroy}}. This lifecycle support works with arbitrary objects, including eager, or lazy singletons. + * {{{./loggerInjection.html}Logger injection}} via Log4J, SLF4J, or Commons Logging. (Adding support for other frameworks should be extremely easy.)