You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2021/07/11 20:44:24 UTC

[logging-log4j2] 02/03: Improve docs

This is an automated email from the ASF dual-hosted git repository.

mattsicker pushed a commit to branch mean-bean-machine
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 8000a004787b28f2c86fa7b3e1ad7479a836076b
Author: Matt Sicker <bo...@gmail.com>
AuthorDate: Sat Jul 10 18:59:19 2021 -0500

    Improve docs
---
 .../apache/logging/log4j/core/config/di/Bean.java  | 68 +++++++++++++++-------
 1 file changed, 48 insertions(+), 20 deletions(-)

diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/di/Bean.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/di/Bean.java
index 4b718ca..37c8795 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/di/Bean.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/di/Bean.java
@@ -24,31 +24,29 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 import java.util.Collection;
 
+/**
+ * Provides lifecycle and dependency injection functionality to managed classes. A bean represents an injectable class
+ * via {@link org.apache.logging.log4j.plugins.di.Inject} or a producer field or method via
+ * {@link org.apache.logging.log4j.plugins.di.Produces} along with their annotation aliases. A bean has a
+ * {@linkplain #getName() name} which can be the empty string to indicate a default bean. Beans provide a
+ * {@linkplain #getTypes() type closure} of matching generic types to allow for injecting more complex types. The
+ * {@linkplain #getScopeType() scope} of a bean controls the lifecycle of instances
+ * {@linkplain #create(InitializationContext) created} and {@linkplain #destroy(Object, InitializationContext) destroyed}
+ * by this bean. Dependencies are injected based on metadata exposed through
+ * {@linkplain #getInjectionPoints() injection points}.
+ *
+ * @param <T> type of instance being managed by this bean
+ */
 public interface Bean<T> {
+
     /**
-     * Creates a new instance of this bean. The given {@link InitializationContext} should be used by implementations
-     * to track dependent objects.
-     *
-     * @param context the context in which the instance is being managed
-     * @return a managed, initialized instance
+     * Returns the name of this bean or an empty string to indicate a default bean.
      */
-    T create(final InitializationContext<T> context);
+    String getName();
 
     /**
-     * Destroys a managed instance in the given context. Implementations should call {@link InitializationContext#close()} to
-     * allow dependent objects to be destroyed.
-     *
-     * @param instance the managed instance to destroy
-     * @param context  the context in which the instance is being managed
+     * Returns the type closure of this bean.
      */
-    void destroy(final T instance, final InitializationContext<T> context);
-
-    Collection<InjectionPoint> getInjectionPoints();
-
-    // for a managed bean: that class
-    // for a producer field or producer method: the declaring class
-    Class<?> getDeclaringClass();
-
     Collection<Type> getTypes();
 
     default boolean hasMatchingType(final Type requiredType) {
@@ -60,11 +58,41 @@ public interface Bean<T> {
         return false;
     }
 
-    String getName();
+    /**
+     * Returns the declaring class that creates this bean. For injectable classes, this returns that class. For producing
+     * methods and fields, this returns their declaring class.
+     */
+    Class<?> getDeclaringClass();
 
+    /**
+     * Returns the scope type of this bean.
+     */
     Class<? extends Annotation> getScopeType();
 
     default boolean isDependentScoped() {
         return getScopeType() == DependentScoped.class;
     }
+
+    /**
+     * Creates a new instance of this bean. The given {@link InitializationContext} should be used by implementations
+     * to track dependent objects.
+     *
+     * @param context the context in which the instance is being managed
+     * @return a managed, initialized instance
+     */
+    T create(final InitializationContext<T> context);
+
+    /**
+     * Destroys a managed instance in the given context. Implementations should call {@link InitializationContext#close()} to
+     * allow dependent objects to be destroyed.
+     *
+     * @param instance the managed instance to destroy
+     * @param context  the context in which the instance is being managed
+     */
+    void destroy(final T instance, final InitializationContext<T> context);
+
+    /**
+     * Returns the collection of injection points to inject dependencies when constructing instances of this bean.
+     */
+    Collection<InjectionPoint> getInjectionPoints();
 }