我有一个类想要使用某些@Autowired服务类作为字段,但该类本身不是@service或@Component,因为它需要非默认构造函数才能正确使用它。
是否有注释声明“请扫描此类以获取@Autowiring但它本身不是一个spring bean”?这似乎是一个真正的用例(客户端想要自动装配和使用一些bean,但它本身不是一个bean)?
答案 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。