Managing dependency between elements

Element does not exist by itself. It always references other elements. ElementFactory can manage such relationships easily.
For example, there is another element, which refers to the SimpleElement in Creating a user defined Element:
public class ComplexElement {
	  private String field1;
	  private SimpleElement simpleElement1;
	  private SimpleElement simpleElement2;
	  public String getField1() {
		    return field1;
	  }
	  public void setField1(String field1) {
		    this.field1 = field1;
	  }
	  public SimpleElement getSimpleElement1() {
		    return simpleElement1;
	  }
	  public void setSimpleElement1(SimpleElement simpleElement1) {
		    this.simpleElement1 = simpleElement1;
	  }
	  public SimpleElement getSimpleElement2() {
		    return simpleElement2;
	  }
	  public void setSimpleElement2(SimpleElement simpleElement2) {
		    this.simpleElement2 = simpleElement2;
	  }
}
In element.xml, you can define it as follows:
<elements.xml>
    <myPackage.SimpleElement id="aSimpleElement" fieldA="valueA"
		   fieldB="valueB" fieldC="valueC" />
    <myPackage.ComplexElement id="complexElement" field="fieldValue">
        <ref Injection="simpleElement1" refId="aSimpleElement" />
        <myPackage.SimpleElement Injection="simpleElement2" fieldA="ABCDE"
			     fieldB="QWERT" fieldC="YUIOP" />
    </myPackage.ComplexElement>
</elements.xml>
You can create such an element using the following statement:
public static void main(String[] args) throws Exception {
ElementFactory factory = new BasicElementFactory("jar:///elements.xml");
	  ComplexElement complexElement = (ComplexElement) factory.getElement("complexElement");
	  System.out.println("complexElement.field1: " + complexElement.getField1());
	  System.out.println("complexElement.simpleElement1.fieldA: " + 
             complexElement.getSimpleElement1().getFieldA());
	  System.out.println("complexElement.simpleElement2.fieldB: " + 
             complexElement.getSimpleElement2().getFieldB());
}
If you run this main method, you can get the following output:
complexElement.field1: fieldValue
complexElement.simpleElement1.fieldA: valueA
complexElement.simpleElement2.fieldB: QWERT