El siguiente ejemplo utiliza metadatos de configuración basados en XML para DI basada en definidor. Una pequeña parte del archivo de configuración Spring XML especifica algunas definiciones de beans de la siguiente manera:

<bean id="exampleBean" class="examples.ExampleBean">
    <!-- inyección mediante setter utilizando un elemento ref anidado -->
    <nombre de propiedad="beanOne">
        <ref bean="otroExampleBean"/>
    </propiedad>
    <!-- inyección mediante setter utilizando el atributo ref más preciso -->
    <nombre de propiedad="beanTwo" ref="yetAnotherBean"/>
    <nombre de propiedad="integerProperty" valor="1"/>
</frijol>
<bean id="otroExampleBean" class="ejemplos.OtroBean"/>
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

El siguiente ejemplo muestra la clase ExampleBean correspondiente:

Java
clase pública EjemploBean {
    privado OtroBean beanOne;
    privado Todavía Otro Frijol Dos;
    privado ent i;
    public void setBeanOne(OtroBean beanOne) {
        this.beanOne = frijolUno;
    }
    setBeanTwo público vacío (YetAnotherBean beanTwo) {
        this.beanTwo = frijolDos;
    }
    setIntegerProperty público vacío (int i) {
        esto.i = i;
    }
}
Kotlin
clase EjemploBean {
    lateinit var beanOne: OtroBean
    lateinit var beanTwo: YetAnotherBean
    var i: Int = 0
}

En el ejemplo anterior, los definidores se declaran para asignarse a las propiedades especificadas en el archivo XML. El siguiente ejemplo utiliza DI basada en constructor:

<bean id="exampleBean" class="examples.ExampleBean">
    <!-- inyección de constructor utilizando un elemento ref anidado -->
    <constructor-arg>
        <ref bean="otroExampleBean"/>
    </constructor-arg>
    <!-- inyección de constructor utilizando el atributo ref más preciso -->
    <constructor-arg ref="yetAnotherBean"/>
    <constructor-arg type="int" value="1"/>
</frijol>
<bean id="otroExampleBean" class="ejemplos.OtroBean"/>
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

El siguiente ejemplo muestra la clase ExampleBean correspondiente:

Java
clase pública EjemploBean {
    privado OtroBean beanOne;
    privado Todavía Otro Frijol Dos;
    privado ent i;
    frijol de ejemplo público (
        Otro frijol, otro frijol, otro frijol todavía, otro frijol, int i) {
        this.beanOne = otroBean;
        this.beanTwo = todavíaOtroBean;
        esto.i = i;
    }
}
Kotlin
clase EjemploBean(
        frijol val privadoUno: OtroBean,
        frijol val privadoDos: OtroBean más,
        valor privado i: Int)

Los argumentos del constructor especificados en la definición del bean se utilizan como argumentos para el constructor ExampleBean.

Ahora considere una variación de este ejemplo que, en lugar de usar un constructor Spring, llama a un método de fábrica static para devolver una instancia del objeto:

<bean id="exampleBean" class="examples.ExampleBean" factory-method="createInstance">
    <constructor-arg ref="otroExampleBean"/>
    <constructor-arg ref="yetAnotherBean"/>
    <constructor-arg value="1"/>
</frijol>
<bean id="otroExampleBean" class="ejemplos.OtroBean"/>
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

El siguiente ejemplo muestra la clase ExampleBean correspondiente:

Java
clase pública EjemploBean {
    // constructor privado (privado)
    frijol de ejemplo privado (...) {
        ...
    }
    // método de fábrica estático; Los argumentos de este método pueden ser considerados.
    // dependencias del bean devuelto,
    // no importa cómo se utilicen realmente estos argumentos.
    Ejemplo estático público CreateInstance (
        Otro frijol, otro frijol, otro frijol todavía, otro frijol, int i) {
        EjemploBean eb = nuevo EjemploBean(...);
        // algunas otras operaciones...
        volver eb;
    }
}
Kotlin
clase EjemploConstructor privado de Bean() {
    objeto compañero {
        // método de fábrica estático; Los argumentos de este método pueden ser considerados.
        // dependencias del bean devuelto,
        // no importa cómo se utilicen realmente estos argumentos.
        @JvmStatic
        divertido createInstance(otroBean: OtroBean, todavíaAnotherBean: TodavíaAnotherBean, i: Int): EjemploBean {
            val eb = EjemploBean(...)
            // algunas otras operaciones...
            regresar eb
        }
    }
}

Los argumentos para un método de fábrica static son proporcionados por elementos <constructor-arg/>, como si realmente se estuviera utilizando un constructor. El tipo de clase devuelta por el método de fábrica no tiene que ser el mismo tipo que la clase que contiene el método de fábrica static (aunque lo es en este ejemplo). Un método de fábrica de instancia (no estático) se puede usar de manera casi idéntica (excepto por usar el atributo factory-bean en lugar del atributo class), por lo que estos matices no están cubiertos aquí.