View/Hide Sitemap Inline ...

Converters

Overview

Converters take string instances in PicoContainer and convert the type that a particular component requires for injection. DefaultPicoContainer has built in converter for primitives:

Integration Example

Here’s a test case demonstrating a simple usage of converters

public static class ConverterSample { 
  public final int value;
  public ConverterSample(Integer value) {
    this.value = value; 
  } 
} 

@Test 
public void testIntegrationWithConverters() { 
	MutablePicoContainer mpc = new DefaultPicoContainer(); 
	mpc.addComponent("converterParameter","42") 
	   .addComponent(ConverterSample.class, ConverterSample.class, new ComponentParameter("converterParameter")); 
	ConverterSample result = mpc.getComponent(ConverterSample.class); 
	assertEquals(42, result.value); }

Custom Converters

You can extend BuiltInConverter, or implement the Converter interface directly.BuiltInConverter has a method addConverter(..) which you may find convenient:

BuiltInConverters bic = new BuiltInConverters(); bic.addConverter(new SomeCustomThingConverter(), SomeCustomThing.class);

Alternatively, you can subclass BuildInConverters:

BuiltInConverters bic = new BuiltInConverters() { 
  @Override 
  protected void addBuiltInConverters() {
    super.addBuiltInConverters(); 
    super.addConverter(new SomeCustomThingConverter(), SomeCustomThing.class); 
  } 
};

or:

BuiltInConverters bic = new BuiltInConverters() { 
  public BuiltInConverters() {
    super.addConverter(new SomeCustomThingConverter(), SomeCustomThing.class); 
  } 
};

Converters themselves are easy to write.Here’s the built in one for boolean:

class BooleanConverter implements Converter<Boolean>{ 
  public Boolean convert(String paramValue) { 
    return Boolean.valueOf(paramValue); 
  } 
}

Setup a container to use your converter:

MutableContainer pico = new DefaultPicoContainer() { 
  @Override 
  public ConverterSet getConverter() { 
    return new BuildInConverters() { 
      public BuiltInConverters() {
        super.addConverter(new SomeCustomThingConverter(), SomeCustomThing.class); 
      } 
    } 
  } 
};