java – 可选的Spring bean引用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 可选的Spring bean引用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1790字,纯文字阅读大概需要3分钟。
内容图文
![java – 可选的Spring bean引用](/upload/InfoBanner/zyjiaocheng/707/c48bdf3283044b119bf279ec47274c25.jpg)
在我的应用程序中,我使用ContextLoaderListener从许多jar加载上下文文件:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/contextBeans.xml</param-value>
</context-param>
这意味着我可以在不进行导入的情况下从其他jar中引用bean.
在应用程序中有多个部署选项,在某些部署中可以排除jar.为了支持我,我希望一些bean引用是可选的.例如:
<bean id="mainAppBean" class="com.someapp.MyApplication">
<constructor-arg index="0" ref="localBean"/>
<constructor-arg index="1" ref="optionalBeanReference1"/>
<constructor-arg index="2" ref="optionalBeanReference2"/>
</bean>
在上面的例子中,我想如果找不到引用,则optionalBeanReference1等于null(以某种方式将其标记为可选)
这可以在Spring完成吗?或者您推荐哪种方法来处理动态参考?
解决方法:
what method do you recommend for handling dynamic references?
我认为@ cristian的@Autowired答案很好.如果该类型的bean可用,那将调用setter方法.但是,如果你有多个相同类型的bean,我相信Spring会抛出异常.如果由于这个或其他原因你不能使用@Autowired,我会看到几个解决方案:
>您可以自己创建ApplicationContextAware类并在上下文中查找bean:
public void setApplicationContext(ApplicationContext applicationContext) {
if (applicationContext.containsBean("optionalBeanReference1")) {
setOptionalBeanReference1(
(OptionalBeanReference1)applicationContext.bean(
"optionalBeanReference1");
}
...
}
>您可以反转依赖性.每个可选类都可以在mainAppBean上设置自己.我在某些情况下使用它,直接依赖会导致循环或其他问题.
<bean id="optionalBeanReference1" class="com.someapp.SomeClass">
<constructor-arg index="0" ref="mainAppBean"/>
</bean>
然后在SomeClass中:
public SomeClass(com.someapp.MyApplication mainAppBean) {
mainAppBean.setOptionalBeanReference1(this);
}
>您可以保留直接依赖关系,然后导入一个定义了bean的文件,或者导入另一个文件,您可以使用工厂bean将bean定义为具有空值.见这factory code.
祝好运.
内容总结
以上是互联网集市为您收集整理的java – 可选的Spring bean引用全部内容,希望文章能够帮你解决java – 可选的Spring bean引用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。