Spring客户端不是一个spring bean,但是想要自动装配的bean字段

时间:2012-01-05 06:48:00

标签: spring dependency-injection

我有一个类想要使用某些@Autowired服务类作为字段,但该类本身不是@service或@Component,因为它需要非默认构造函数才能正确使用它。

是否有注释声明“请扫描此类以获取@Autowiring但它本身不是一个spring bean”?这似乎是一个真正的用例(客户端想要自动装配和使用一些bean,但它本身不是一个bean)?

2 个答案:

答案 0 :(得分:0)

您需要手动注入bean并使用context:annotation config。如果你有一个课程如下

public class ABD{

@Autowired
public Bean2 b2;    

}

并且如果通过构造函数注入将ABD注入到其他bean中,@ Autowired将应用其他spring将无法实例化bean,因为它没有无参数构造函数。

另一方面,如果您的Object不是bean,请参阅How to autowire a bean inside a class that is not a configured bean?上的讨论。代码就是这样的

        context.getAutowireCapableBeanFactory().autowireBean(this);

要在非Spring bean中获取上下文,您可以使用ContextSingletonBeanFactoryLocator。但是如果你使用构造函数注入将它变成一个spring bean,那就容易多了。

答案 1 :(得分:0)

您可以尝试类似

的内容
<bean id="exampleBean" class="examples.ExampleBean">
    <constructor-arg><ref bean="anotherExampleBean"/></constructor-arg>
    <constructor-arg><ref bean="yetAnotherBean"/></constructor-arg>
    <constructor-arg type="int"><value>1</value></constructor-arg>
</bean>

<bean id="anotherExampleBean" class="examples.AnotherBean"/>
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

public class ExampleBean {

    private AnotherBean beanOne;
    private YetAnotherBean beanTwo;
    private int i;

    public ExampleBean(AnotherBean anotherBean, YetAnotherBean yetAnotherBean, int i) {
        this.beanOne = anotherBean;
        this.beanTwo = yetAnotherBean;
        this.i = i;
    }
}

对于必须自动装配的课程。有关详细信息,请参阅this