【问题标题】:recursively call own class by @Inject In spring在spring中通过@Inject递归调用自己的类
【发布时间】:2015-12-24 07:46:53
【问题描述】:
@Named
@Scope(value = "prototype")
public class Product extends Factory

{
@Inject
protected Product product;

protected void something(){}

protected void thatThing(){ 

}

下面的异常被抛出

找到依赖项:预计至少有 1 个符合条件的 bean 此依赖项的自动装配候选者。 依赖注解:{@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) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) 截断。查看完整堆栈跟踪的日志文件

【问题讨论】:

    标签: java spring


    【解决方案1】:

    如果范围设置为原型,则 Spring IoC 容器会在每次发出对该特定 bean 的请求时创建对象的新 bean 实例。

    在您的代码中,您有一个会员产品。所以每次你需要一个新产品时,框架都会创建一个新的产品成员实例。并且递归地,该成员将再次创建它的成员。所以显然是不合适的。

    我想,或许应该是这样的:

    @Named
    public class ProductBuilder extends Factory {
    
      @Inject
      protected Product product;
    
      protected void something(){}
    
      protected void thatThing(){ 
    
    }
    

    然后对于您的产品,将 bean 定义为原型:

    @Scope(value = "prototype")
    public class Product {
      ....
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-02
      • 2019-06-28
      • 2019-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 2013-02-13
      相关资源
      最近更新 更多