@Named
@Scope(value = "prototype")
public class Product extends Factory
{
@Inject
protected Product product;
protected void something(){}
protected void thatThing(){
}
正在抛出异常
发现依赖:预计至少有1个符合条件的bean autowire候选人这种依赖。 依赖注释:{@ javax.inject.Inject()} 在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java) :292) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) at org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:304) 截断。请参阅日志文件以获取完整的堆栈跟踪
答案 0 :(得分:1)
如果scope设置为prototype,则每次对该特定bean发出请求时,Spring IoC容器都会创建该对象的新bean实例。
在您的代码中,您有一个成员产品。因此,每当您需要新产品时,框架将创建一个新的产品成员实例。并且递归地,成员将再次创建它的成员。所以这显然是不合适的。
我想,也许它应该是这样的:
@Named
public class ProductBuilder extends Factory {
@Inject
protected Product product;
protected void something(){}
protected void thatThing(){
}
然后,对于您的产品,将bean定义为原型:
@Scope(value = "prototype")
public class Product {
....
}