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 2020/03/22 22:14:47 UTC
[logging-log4j2] 01/02: Split bean loading and validation
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 5138f527eaee7fe34c7c2f1bbd1f479e276fcd4c
Author: Matt Sicker <bo...@gmail.com>
AuthorDate: Sun Mar 22 14:29:31 2020 -0500
Split bean loading and validation
Signed-off-by: Matt Sicker <bo...@gmail.com>
---
.../plugins/defaults/bean/DefaultBeanManager.java | 3 ++-
.../log4j/plugins/spi/bean/BeanManager.java | 26 +++++++++++++++-------
.../log4j/plugins/test/BeanJUnit4Runner.java | 6 ++---
3 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/DefaultBeanManager.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/DefaultBeanManager.java
index 46afdbf..5de7ec8 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/DefaultBeanManager.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/DefaultBeanManager.java
@@ -231,7 +231,8 @@ public class DefaultBeanManager implements BeanManager {
}
}
- private void validateInjectionPoint(final InjectionPoint point) {
+ @Override
+ public void validateInjectionPoint(final InjectionPoint point) {
final MetaElement element = point.getElement();
if (element.isAnnotationPresent(Produces.class)) {
throw new DefinitionException("Cannot inject into a @Produces element: " + element);
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/bean/BeanManager.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/bean/BeanManager.java
index acd772e..9df22e7 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/bean/BeanManager.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/bean/BeanManager.java
@@ -30,8 +30,8 @@ import java.util.Optional;
public interface BeanManager extends AutoCloseable {
/**
- * Loads beans from the given classes. This looks for injectable classes and producers, validates them, registers
- * them in this manager, then returns the loaded beans.
+ * Loads beans from the given classes. This looks for injectable classes and producers in the provided classes,
+ * loads them into this manager, and returns the loaded beans.
*
* @param beanClasses classes to load beans from
* @return beans loaded from the given classes
@@ -39,25 +39,35 @@ public interface BeanManager extends AutoCloseable {
Collection<Bean<?>> loadBeans(final Collection<Class<?>> beanClasses);
/**
- * Loads beans from the given classes. This looks for injectable classes and producers, validates them, registers
- * them in this manager, then returns the loaded beans.
+ * Loads beans from the given classes. This looks for injectable classes and producers, registers them in this
+ * manager, validates them, then returns the validated beans.
*
* @param beanClasses classes to load beans from
* @return beans loaded from the given classes
+ * @throws ValidationException if any beans have validation errors
*/
- default Collection<Bean<?>> loadBeans(final Class<?>... beanClasses) {
- return loadBeans(Arrays.asList(beanClasses));
+ default Collection<Bean<?>> loadAndValidateBeans(final Class<?>... beanClasses) {
+ final Collection<Bean<?>> beans = loadBeans(Arrays.asList(beanClasses));
+ validateBeans(beans);
+ return beans;
}
/**
* Validates beans and throws a {@link ValidationException} if there are any errors.
*
* @param beans beans to check for validation errors
+ * @throws ValidationException if any beans have validation errors
*/
void validateBeans(final Iterable<Bean<?>> beans);
- // TODO: re-add query methods for beans as needed
-// Collection<Bean<?>> getBeans();
+ /**
+ * Validates the given injection point.
+ *
+ * @param point injection point to validate
+ * @throws org.apache.logging.log4j.plugins.spi.DefinitionException if the injection point is improperly defined
+ * @throws org.apache.logging.log4j.plugins.spi.UnsatisfiedBeanException if no beans can satisfy the injection point
+ */
+ void validateInjectionPoint(InjectionPoint point);
/**
* Creates an InitializationContext for a given Bean instance for use in dependency injection SPIs.
diff --git a/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/test/BeanJUnit4Runner.java b/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/test/BeanJUnit4Runner.java
index 7376ab7..b1a2eb7 100644
--- a/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/test/BeanJUnit4Runner.java
+++ b/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/test/BeanJUnit4Runner.java
@@ -92,10 +92,10 @@ public class BeanJUnit4Runner extends BlockJUnit4ClassRunner {
injector = new DefaultInjector(beanManager);
final WithBeans testClassBeans = getTestClass().getAnnotation(WithBeans.class);
if (testClassBeans != null) {
- beanManager.loadBeans(testClassBeans.value());
+ beanManager.loadAndValidateBeans(testClassBeans.value());
}
final Class<T> testClass = TypeUtil.cast(getTestClass().getJavaClass());
- final Optional<Bean<T>> testBean = beanManager.loadBeans(testClass).stream()
+ final Optional<Bean<T>> testBean = beanManager.loadAndValidateBeans(testClass).stream()
.filter(bean -> bean.hasMatchingType(testClass))
.findAny()
.map(TypeUtil::cast);
@@ -118,7 +118,7 @@ public class BeanJUnit4Runner extends BlockJUnit4ClassRunner {
try (final InitializationContext<T> context = beanManager.createInitializationContext(testClassBean)) {
final WithBeans methodBeans = method.getAnnotation(WithBeans.class);
if (methodBeans != null) {
- beanManager.loadBeans(methodBeans.value());
+ beanManager.loadAndValidateBeans(methodBeans.value());
}
final Class<T> testClass = TypeUtil.cast(getTestClass().getJavaClass());
final MetaClass<T> metaClass = elementManager.getMetaClass(testClass);