2010-10-08 60 views
29

有什麼方法可以使用註釋使用查找方法注入?如何做Spring注入方法注入註解?

考慮下面的類:

@Service 
public abstract class A { 


    protected abstract createB(); 

} 

爲了得到它的工作我在春天的applicationContext.xml聲明如下:

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

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

即使我使用<context:component-scan base>我有在XML中聲明它也是如此。我認爲這不是一個好方法。

如何使用註釋做到這一點?

回答

28

可以使用javax.inject.Provider。非常感謝Phil Webb

public class MySingleton { 

    @Autowired 
    private Provider<MyPrototype> myPrototype; 

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

} 
+1

請注意下面關於@Lookup的答案 - 在4.1之後的版本中可以使用註釋。儘管我認爲提供者在閱讀代碼時更清晰並且更少混淆。 – Tarion 2015-09-25 08:35:14

13

它僅在Spring> = 4.1時實現請參閱ticket

+1

在Spring Framework 4.1中,它可以作爲\ @Lookup註釋。請參閱@ Danny-Dan的回答。 – HairOfTheDog 2014-12-09 19:40:33

+0

謝謝,相應地解答我的答案 – 2014-12-15 17:57:33

17

,如果你想保持與春節API

public class MySingleton { 

    @Autowired 
    private ObjectFactory<MyPrototype> myPrototypeFactory; 

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

你可以閱讀更多的documentation也可以與org.springframework.beans.factory.ObjectFactory

10

最後引入爲@Lookup註釋。這裏是discussion關於如何使用它。

+0

@Lookup註解需要Spring 4.1或更高版本 – HairOfTheDog 2014-12-09 19:35:56