开发者

How to do Spring Lookup Method Injection with Annotations?

Is there any way to use Lookup Method Injection using annotations?

Given the following class:

@Service
public abstract class A {


    protected abstract createB();

}

In order to get it to work I have to declare in spring applicationContext.x开发者_高级运维ml the following:

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

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

Even though I am using <context:component-scan base> I have to declare it also in the XML. Not a good approach I think.

How to do it with annotations?


It is possible to use javax.inject.Provider. All thanks go to Phil Webb.

public class MySingleton {

  @Autowired
  private Provider<MyPrototype> myPrototype;

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

}


It is also possible with org.springframework.beans.factory.ObjectFactory if you want to keep up with Spring API

public class MySingleton {

  @Autowired
  private ObjectFactory<MyPrototype> myPrototypeFactory;

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

you can read more in the documentation.


It is implemented only with Spring >= 4.1 See the ticket.


Finally introduced as @Lookup annotation. Here is discussion on how to use it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜