(no commit message)
[utils] / support / cdi / src / main / java / org / wamblee / cdi / SimpleInjector.java
index 7a8db0da4397c21531acfcf3e5d75522248d6431..fff8f113be13fe8525e6b850366f7fac05b42589 100644 (file)
@@ -19,30 +19,55 @@ package org.wamblee.cdi;
  * Singleton injector access. This should be used as main entry point for
  * injection. A different {@link InjectorFactory} can be plugged in for testing.
  * 
+ * Given the following class: 
+ * <pre> 
+ * class Pojo {
+ *   &#064;EJB
+ *   private Service service; 
+ *   
+ *   ...
+ * }
+ * </pre>
+ * injecting the EJB into a POJO is accomplished as follows: 
+ * <pre>
+ *   Pojo pojo = new Pojo(); 
+ *   SimpleInjector injector = new SimpleInjector(); 
+ *   injector.inject(pojo);
+ * </pre>
+ * 
+ * Note that it is recommended to cache the injector because the injector does caching 
+ * of the types that it injects into. Caching the injector makes sure that a class is not
+ * analysed again for annotation every time injection is used. 
+ * 
  * @author Erik Brakkee
  */
 public class SimpleInjector {
 
-    private static InjectorCache cache = new InjectorCache(
+    private InjectorCache cache = new InjectorCache(
         new CdiInjectorFactory());
 
     /**
-     * Override the injector factory (mainly fo runit test).
-     * 
-     * @param aFactory
-     *            Factory.
+     * Constructs the injector. 
      */
-    public static void setInjectorFactory(InjectorFactory aFactory) {
+    public SimpleInjector() { 
+        cache = new InjectorCache(new CdiInjectorFactory());
+    }
+    
+    /**
+     * Construcst the injector. 
+     * @param aFactory Factory to use. 
+     */
+    public SimpleInjector(InjectorFactory aFactory) { 
         cache = new InjectorCache(aFactory);
     }
-
+    
     /**
      * Injects into a given object.
      * 
      * @param aObject
      *            Object to inject into.
      */
-    public static void inject(Object aObject) {
+    public void inject(Object aObject) {
         cache.getInjector(aObject.getClass()).inject(aObject);
     }
 }