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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top