Come fare primavera metodo di ricerca Iniezione con annotazioni?
-
28-09-2019 - |
Domanda
C'è un modo per utilizzare il metodo di ricerca di iniezione utilizzando le annotazioni?
Dato il seguente classe:
@Service
public abstract class A {
protected abstract createB();
}
Al fine di farlo funzionare devo dichiarare in primavera applicationContext.xml il seguente:
<bean id="b" class="com.xyz.B">
</bean>
<bean id="a" class="com.xyz.A">
<lookup-method name="createB" bean="b"/>
</bean>
Anche se sto usando <context:component-scan base>
devo dichiararlo anche in XML. Non un approccio buono credo.
Come fare con annotazioni?
Soluzione
E 'possibile utilizzare javax.inject.Provider
. Tutti i ringraziamenti vanno a Phil Webb .
public class MySingleton {
@Autowired
private Provider<MyPrototype> myPrototype;
public void operation() {
MyPrototype instance = myPrototype.get();
// do something with the instance
}
}
Altri suggerimenti
E 'possibile anche con org.springframework.beans.factory.ObjectFactory
se si vuole tenere il passo con API Primavera
public class MySingleton {
@Autowired
private ObjectFactory<MyPrototype> myPrototypeFactory;
public void operation() {
MyPrototype instance = myPrototypeFactory.getObject();
// do something with the instance
}
}
si può leggere di più nel documentazione .
E 'implementato solo con la primavera> = 4.1 vedere le biglietto .
Infine introdotto come @Lookup annotazione. Ecco discussione su come utilizzarlo.