【问题标题】:Spring:define bean's property(ref to other bean) as optionalSpring:将 bean 的属性(参考其他 bean)定义为可选
【发布时间】:2011-05-15 14:51:25
【问题描述】:

有两个bean定义:

文件 a.xml

<bean id="A" class="com.A">
 <property name="bClass" ref="B"/>
</bean>

文件 b.xml

<bean id="B" class="com.B"/>

在某些情况下,文件 b.xml 不包含 bean B 的定义。
而另一方面,文件 a.xml 始终包含指向 B 定义的链接。

如何将B bean的引用定义为可选,以避免org.springframework.beans.factory.NoSuchBeanDefinitionException

【问题讨论】:

    标签: spring reference properties javabeans autowired


    【解决方案1】:

    你不能。如果您有对B 的引用,那么B 必须存在。您需要确保存在某种存根B,其定义将被Bb.xml 中的定义覆盖。

    或者,不要将B 注入A,而是让A 使用B 查找BeanFactory.getBean("B"),并以编程方式处理B 的潜在缺失。

    【讨论】:

      【解决方案2】:

      另一种可能性(除了 skaffman 建议的这些)是扭转依赖性。让 bean B 知道 bean A。它甚至可以在其中注册自己 - 即调用 setter,例如:

      public class B {
        private A a;
      
        public void init() {
          a.setB(this);
        }
      }
      

      【讨论】:

        【解决方案3】:

        @Autowired(required=false) 帮助

        【讨论】:

        • 怎么来的?您没有在设置中使用@autowired。那么注释如何应用呢?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        • 2011-06-03
        • 1970-01-01
        • 2018-07-02
        • 1970-01-01
        相关资源
        最近更新 更多