2010-10-08 12 views
29

¿Hay alguna forma de usar Inyección de método de búsqueda usando anotaciones?¿Cómo hacer el método de búsqueda de primavera Inyección con anotaciones?

Dada la siguiente clase:

@Service 
public abstract class A { 


    protected abstract createB(); 

} 

Con el fin de conseguir que funcione tengo que declarar en la primavera de applicationContext.xml lo siguiente:

<bean id="b" class="com.xyz.B"> 
</bean> 

<bean id="a" class="com.xyz.A"> 
    <lookup-method name="createB" bean="b"/> 
</bean> 

A pesar de que estoy usando <context:component-scan base> tengo declararlo también en el XML. No es un buen enfoque, creo.

¿Cómo hacerlo con anotaciones?

Respuesta

28

Es posible usar javax.inject.Provider. Todas las gracias van a Phil Webb.

public class MySingleton { 

    @Autowired 
    private Provider<MyPrototype> myPrototype; 

    public void operation() { 
    MyPrototype instance = myPrototype.get(); 
    // do something with the instance 
    } 

} 
+1

También tenga en cuenta la respuesta sobre @Lookup a continuación - es posible con Spring 4.1 o posterior para utilizar la anotación. Aunque creo que el Proveedor es mucho más limpio y menos confuso mientras lee el código. – Tarion

13

Se implementa solo con Spring> = 4.1 Consulte el ticket.

+1

En Spring Framework 4.1 está disponible como la anotación \ @Lookup. Ver la respuesta de @ Danny-Dan. – HairOfTheDog

+0

Gracias, udpated mi respuesta en consecuencia –

17

También es posible con org.springframework.beans.factory.ObjectFactory si desea mantenerse al día con la API de primavera

public class MySingleton { 

    @Autowired 
    private ObjectFactory<MyPrototype> myPrototypeFactory; 

    public void operation() { 
    MyPrototype instance = myPrototypeFactory.getObject(); 
    // do something with the instance 
    } 
} 

se puede leer más en el documentation.

10

Finalmente se introdujo como anotación @Lookup. Aquí está discussion sobre cómo usarlo.

+0

La anotación @Lookup requiere Spring 4.1 o posterior – HairOfTheDog

Cuestiones relacionadas