Newsletter:

IOC-DI Container

IOC-DIContainer is a IoC container for java. Has the following features:

1) Constructor injection
IOCContainer iocContainer = new IOCContainer();
iocContainer
.addBean(MyBean.class)
.addConstructiorArg(MySimpleBean.class);
MyBean instance = (MyBean) iocContainer.getBean(MyBean.class);

2) Setter injection
IOCContainer iocContainer = new IOCContainer();
iocContainer
.addBean(MyBean.class)
.addProperty("bean",MySimpleBean.class);
MyBean instance = (MyBean) iocContainer.getBean(MyBean.class);

3) Factory
IOCContainer iocContainer = new IOCContainer();
iocContainer.addBean(MyFactory.class);

BeanBuilder beanBuilder = iocContainer.addBean(MySimpleBean.class);
beanBuilder.setFactoryMethod("getInstance");
beanBuilder.setFactory(MyFactory.class.getName());

MySimpleBean instance = (MySimpleBean)iocContainer.getBean(MySimpleBean.class);

4) Factory with static method
IOCContainer iocContainer = new IOCContainer();

iocContainer
.addBean(MyEnum.class)
.addConstructiorArg("VALUE2")
.setFactoryMethod("valueOf");

MyEnum instance = (MyEnum) iocContainer.getBean(MyEnum.class);

5)Singleton
IOCContainer iocContainer = new IOCContainer();
iocContainer
.addBean("myBean", MySimpleBean.class, ScopeType.SINGLETON);

Object instance = iocContainer.getBean("myBean");

6) Web application
web.xml:

<listener>
<listener-class>org.brandao.ioc.web.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.brandao.ioc.web.RequestContextListener</listener-class>
</listener>

GlobalScope:

IOCContainer iocContainer = new IOCContainer();
iocContainer
.addBean("myBean", TestHelper.MySimpleBean.class, ScopeType.GLOBAL);

Object instance = iocContainer.getBean("myBean");

RequestScope:

IOCContainer iocContainer = new IOCContainer();
iocContainer
.addBean("myBean", TestHelper.MySimpleBean.class, ScopeType.REQUEST);

Object instance = iocContainer.getBean("myBean");

SessionScope:

IOCContainer iocContainer = new IOCContainer();
iocContainer
.addBean("myBean", TestHelper.MySimpleBean.class, ScopeType.SESSION);

Object instance = iocContainer.getBean("myBean");

7)Custom scope

public static class CustomScope implements Scope{

private final Map<String,Object> data;

public CustomScope() {
this.data = new HashMap();
}

public void put(String name, Object value) {
data.put( name, value );
}

public Object get(String name) {
return data.get( name );
}

public String getName(){
return "customScope";
}

}

CustomScope customScope = new CustomScope();
IOCContainer iocContainer = new IOCContainer();
iocContainer.getScopeManager()
.register(customScope.getName(), customScope);

iocContainer
.addBean( "myBean", TestHelper.MySimpleBean.class,
ScopeType.valueOf( customScope.getName() ) );

Object instance = iocContainer.getBean("myBean");

8)Autowire

Setter injection:

IOCContainer iocContainer = new IOCContainer();

iocContainer
.addBean(MySimpleBean.class);

iocContainer
.addBean(MyBean.class)
.addProperty("bean");

MyBean instance = (MyBean) iocContainer.getBean(MyBean.class);

Constructor injection:

IOCContainer iocContainer = new IOCContainer();

iocContainer
.addBean("bean",MySimpleBean.class);
iocContainer
.addBean(MyBean.class).addConstructiorArg();

MyBean instance = (MyBean) iocContainer.getBean(MyBean.class);

Factory:

IOCContainer iocContainer = new IOCContainer();

iocContainer.addBean("myEnumId", String.class)
.addConstructiorArg("VALUE2");

iocContainer
.addBean(MyEnum.class)
.addConstructiorArg()
.setFactoryMethod("valueOf");

MyEnum instance = (MyEnum) iocContainer.getBean(MyEnum.class);