* 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 {
+ * @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);
}
}