So far this series has covered simple IoC dependency injection as well as bean initialization with @PostConstruct and constructor injection.
In this part we will introduce container managed contextual scopes to Voodoo DI.
A scope defines the life-cycle of a bean, allowing state to be preserved and or shared across multiple interactions. DI frameworks offer a fast variety of build-in and add-on scopes, such as @RequestScoped, @SessionScoped, @ApplicationScoped, etc…
So far Voodoo DI simply maps interfaces, supertypes and the target type directly to the concrete implementations.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //Map Interfaces and Supertypes to concrete implementation. private final Map<Class, Class> types = new ConcurrentHashMap<>(); ... public <T> T instance(Class<T> clazz) { T newInstance = null; try { Constructor<T> constructor = types.get(clazz).getConstructor(new Class[]{}); newInstance = constructor.newInstance(new Object[]{}); processFields(clazz, newInstance); } catch (Exception ex) { Logger.getLogger(Voodoo.class.getName()).log(Level.SEVERE, null, ex); throw new RuntimeException(ex); } return newInstance; } ... |
Continue reading Understanding Dependency Injection – Part 3 Contexts