From 7cc24116aec0bb2ae0cdec40b31ef745e7a93115 Mon Sep 17 00:00:00 2001 From: Erik Brakkee Date: Thu, 22 Jul 2010 08:47:47 +0000 Subject: [PATCH] --- .../java/org/wamblee/inject/Injectable.java | 14 +++++++++++--- .../wamblee/inject/InjectorFactoryBuilder.java | 17 ++++++++++++++++- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/support/inject/src/main/java/org/wamblee/inject/Injectable.java b/support/inject/src/main/java/org/wamblee/inject/Injectable.java index 4f55cc35..b44192cf 100644 --- a/support/inject/src/main/java/org/wamblee/inject/Injectable.java +++ b/support/inject/src/main/java/org/wamblee/inject/Injectable.java @@ -29,13 +29,21 @@ package org.wamblee.inject; */ public abstract class Injectable { - private static final SimpleInjector INJECTOR = new SimpleInjector( - InjectorFactoryBuilder.getInjectorFactory()); + private final SimpleInjector injector = + InjectorFactoryBuilder.getInjector(); /** * Inheritance style constructor. */ protected Injectable() { - INJECTOR.inject(this); + injector.inject(this); } + + /** + * Gets the default injector. + * @return Injector. + */ + public SimpleInjector getInjector() { + return injector; + } } diff --git a/support/inject/src/main/java/org/wamblee/inject/InjectorFactoryBuilder.java b/support/inject/src/main/java/org/wamblee/inject/InjectorFactoryBuilder.java index 13db8412..197311a8 100644 --- a/support/inject/src/main/java/org/wamblee/inject/InjectorFactoryBuilder.java +++ b/support/inject/src/main/java/org/wamblee/inject/InjectorFactoryBuilder.java @@ -20,13 +20,21 @@ import java.util.ServiceLoader; /** * Utility for obtaining an implementation of the {@link InjectorFactory} using - * {@link ServiceLoader}. + * {@link ServiceLoader} and for obtaining a {@link SimpleInjector}. + * + * The builder takes care that the factory and simple injector are built only once. + * For test code, make sure to call {@link #setInjectorFactory(InjectorFactory)} + * before each test case to force the retrieval of a new factory and injector. This + * is important because if the simple injector is not created again it will use + * cached {@link Injector} instances from other tests. * * @author Erik Brakkee */ public class InjectorFactoryBuilder { private static InjectorFactory FACTORY; + + private static SimpleInjector INJECTOR; /** * Sets the injector factory. This is useful for testing. @@ -34,6 +42,7 @@ public class InjectorFactoryBuilder { */ public static void setInjectorFactory(InjectorFactory aFactory) { FACTORY = aFactory; + INJECTOR = new SimpleInjector(aFactory); } /** @@ -45,9 +54,15 @@ public class InjectorFactoryBuilder { public static InjectorFactory getInjectorFactory() { if (FACTORY == null) { FACTORY = findInjectorFactory(); + INJECTOR = new SimpleInjector(FACTORY); } return FACTORY; } + + public static SimpleInjector getInjector() { + getInjectorFactory(); + return INJECTOR; + } /** * Finds the injector factory musing ServiceLoader -- 2.31.1