2010-10-08 75 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