DependencyInjection.java
package fi.eis.libraries.di;
import java.io.File;
import java.util.List;
import java.util.Map;
import fi.eis.libraries.di.context.configclass.ConfigurationClassContext;
import fi.eis.libraries.di.context.Context;
import fi.eis.libraries.di.context.deployment.DeploymentUnitContext;
import fi.eis.libraries.di.context.Module;
import fi.eis.libraries.di.logger.LogLevel;
/**
*
* Main entrypoint class for the dependency injection. It supports three forms of dependency
* injection: you can
* 1) ask it to create a context from the deployment unit (e.g. jar) in question (deploymentUnitContext())
* 2) ask it to create a context based on spring-style configuration class (configurationClassContext())
* 3) list the classes and their instances explicitly as modules and ask it to create a context based on that (module() + context())
* 4) list the classes explicitly and ask it to create a context based on that (context())
* @author eis
*/
public class DependencyInjection {
public static Module module(Class... classes) {
return new Module(classes);
}
public static Module module(List<Class> classes) {
return new Module(classes);
}
public static Module module(Map<Class,Object> classesWithInstances) {
return new Module(classesWithInstances);
}
public static Context context(Module... modules) {
// add all other modules to combined one
Module combinedModule = new Module();
for (Module module: modules) {
combinedModule.add(module);
}
// create a new module based on combined one
return new Context(combinedModule);
}
public static Context context(Class... classes) {
// create a new module based on given classes
return new Context(new Module(classes));
}
public static Context deploymentUnitContext(Class sourceClass) {
return new DeploymentUnitContext(sourceClass);
}
public static Context deploymentUnitContext(File jarFile) {
return new DeploymentUnitContext(jarFile);
}
public static Context deploymentUnitContext(Class sourceClass, LogLevel logLevel) {
return new DeploymentUnitContext(sourceClass, logLevel);
}
public static Context deploymentUnitContext(File jarFile, LogLevel logLevel) {
return new DeploymentUnitContext(jarFile, logLevel);
}
public static Context configurationClassContext(Class... exampleJavaConfigClass) {
return new ConfigurationClassContext(exampleJavaConfigClass);
}
public static Context configurationClassContext(LogLevel logLevel, Class... exampleJavaConfigClass) {
return new ConfigurationClassContext(logLevel, exampleJavaConfigClass);
}
}