2 votos

¿Puede el contenedor Spring inyectar colaboradores mediante métodos personalizados?

Normalmente las dependencias se inyectan a través de setters mediante la siguiente configuración ( http://static.springsource.org/sprin...beans-beanname ) :

<bean id="exampleBean" class="examples.ExampleBean">
    <!-- setter injection using the nested <ref/> element -->
    <property name="beanOne"><ref bean="anotherExampleBean"/></property>

    <!-- setter injection using the neater 'ref' attribute -->
    <property name="beanTwo" ref="yetAnotherBean"/>
    <property name="integerProperty" value="1"/>
</bean>

<bean id="anotherExampleBean" class="examples.AnotherBean"/>
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

Digamos que la clase examples.ExampleBean tiene una colección de objetos oyentes, y el método addListener(SomeListenerInterface) es la única forma posible de añadir oyentes. ¿Puedo inyectar oyentes de forma declarativa en xml como se hace con los definidores de propiedades?

2voto

skaffman Puntos 197885

Probablemente se podría conjurar algún mecanismo barroco para hacer todo esto en XML, pero la forma más limpia de hacerlo es utilizar un FactoryBean . Usted escribe una clase que implementa FactoryBean y que se encarga de construir y configurar su objeto de destino (véase Spring docs ). Su FactoryBean tendría los getters/setters/autoconexión necesarios, y los inyecta en el objeto de destino.

Esta es a menudo la forma más limpia de manejar a los que no son java en Spring, particularmente si no se puede modificar la clase de destino.

1voto

Arthur Ronald Puntos 19001

Aquí va la definición de elemento de propiedad

Los elementos de la propiedad corresponden a JavaBean métodos setter expuestas por las clases de frijoles.

Para conseguir su objetivo, puede utilizar la anotación @Autowired. Funciona incluso cuando se utiliza un nombre arbitrario

@Autowired
public void inject(SomeListenerInterface someListenerInterface) {
    this.someListenerInterface = someListenerInterface;
}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X