java-具有复合模式的Spring循环引用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-具有复合模式的Spring循环引用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1449字,纯文字阅读大概需要3分钟。
内容图文
![java-具有复合模式的Spring循环引用](/upload/InfoBanner/zyjiaocheng/674/029a5a9dc0114ea9b8276983995d5c77.jpg)
假设我有这样的结构:
如您所见,这是一种复合模式.如何使用Spring实例化此模式?例如,如果我有以下代码:
<bean id="leaf1">
<constructor-arg name="Name" value="leaf1" />
</bean>
<bean id="leaf2">
<constructor-arg name="Name" value="leaf2" />
</bean>
<bean id="leaf3">
<constructor-arg name="Name" value="leaf3" />
</bean>
<bean id="composite1">
<constructor-arg>
<set>
<ref bean="composite2" />
<ref bean="leaf2" />
</set>
</constructor-arg>
</bean>
<bean id="composite2">
<constructor-arg>
<set>
<ref bean="leaf3" />
<ref bean="leaf1" />
</set>
</constructor-arg>
</bean>
您可能会在这里看到,此配置将引发org.springframework.beans.factory.BeanCreationException,因为有一个循环引用.组合包含一个组件列表,一个组件由Leaf和Composite组成.如何使用Spring解决此问题?
解决方法:
此类问题的答案不是特定于弹簧的,如果您使用常规构造函数在纯Java中对此进行编码,则答案是相同的.
一个简单的解决方案是允许使用setter注入来配置您的复合材料,从而打破构造所需的参考周期,但这有损于构造函数注入的理想主义.一种替代方法是创建一个委托给另一个Composite的Composite的子类.尽管不理想,这将允许您稍后填写实际参考,但可以使用spring @postContstruct方法来检查是否确实设置了参考,这提供了与使用常规构造函数类似的保护措施.
有一些框架可以通过注入代理为您自动处理此循环构造函数的情况(例如nanocontainer),但这实际上只是隐藏了带有瞬态清新剂的设计气味.最终,您需要两步构造来实现这一点-使用Java中的纯构造函数是不可能的,因为打破依赖关系周期需要使用非构造函数初始化程序.
为这些类共同编写功能测试可能会从另一个角度帮助突出设计问题.
内容总结
以上是互联网集市为您收集整理的java-具有复合模式的Spring循环引用全部内容,希望文章能够帮你解决java-具有复合模式的Spring循环引用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。