Parameters
It is possible to define container parameters that will be injected into
its beans after the wiring and before the init method invocation.
Parameter is defined with the String
name and value of any type.
By default, parameters are injected before init method invocation. In
some cases, some init methods has to be invoked before setting the
parameters. That is done by setting the firstOff
element of
@PetiteInitMethod
, to indicate that init method has to be invoked
before parameters injection.
Convention
Parameters are bind to the container using the convention: parameter name starts with the bean name. Example:
PetiteContainer pc = new PetiteContainer(); pc.registerBean(Foo.class); // registered as "foo" pc.defineParameter("foo.name", "FOONAME"); ... Foo foo = (Foo) pc.getBean("foo"); foo.getName(); // "FOONAME"
Parameter References
Sometimes, one parameter has to be injected in several different beans.
In order to prevent repeating, it is possible to use parameter
references. Parameter reference is a parameter name surrounded with
${}
that points to some other parameter. It can occur anywhere in
the value string. Nested references are supported as well. Example:
PetiteContainer pc = new PetiteContainer(); pc.registerBean(Foo.class); // registered as "foo" pc.defineParameter("foo.name", "${name}"); // ref -> name pc.defineParameter("name", "${name${num}}"); // ref -> name2 pc.defineParameter("num", "2"); pc.defineParameter("name2", "FOONAME"); ... Foo foo = (Foo) pc.getBean("foo"); foo.getName(); // "FOONAME"
Resolving references is optional and, by default, is turned on.
Petite container doesn't detect circular dependencies when resolving parameters.
References can be escaped with single \
character, while \\
removes escaping effect and are resolved to single backslash.
References are resolved late, on their first injection.
Loading from map
It is possible to load parameters from any Map
implementation, such as
Properties
.