当前位置: 首页 > news >正文

详细说明依赖项和配置

说明:

1.Spring Framework版本:7.0.2

2.开发框架:Spring boot(版本3.5.6)

3.开发工具:eclipse

4.jdk版本:25

5.操作系统:debian12

详细说明依赖项和配置

如前一节所述,您可以将Bean属性和构造器参数定义为对其他受管理Bean(合作者)的引用,或定义为内联定义的值。为此,Spring基于XML的配置元数据在其<property/>和<constructor-arg/>元素中支持子元素类型。

直接值(基本类型、字符串等)

<property/> 元素的 value 属性将属性或构造函数参数指定为人类可读的字符串表示形式。Spring的转换服务用于将这些值从String类型转换为属性或参数的实际类型。以下示例展示了设置的各种值:

<bean destroy-method="close"> <!-- 这会导致调用 setDriverClassName(String) 方法 --> <property value="com.mysql.jdbc.Driver"/> <property value="jdbc:mysql://localhost:3306/mydb"/> <property value="root"/> <property value="misterkaoli"/> </bean>

以下示例使用p-namespace来实现更简洁的XML配置:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean destroy-method="close" p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost:3306/mydb" p:username="root" p:password="misterkaoli"/> </beans>

上述XML更为简洁。但是,除非您在创建Bean定义时使用的是支持自动属性补全的IDE(如IntelliJ IDEA或Spring Tools),则拼写错误否将在运行时而非设计时被发现。强烈建议您使用此类IDE辅助工具。

您还可以按照以下方式配置一个java.util.Properties实例:

<bean > <!-- 被定义为 java.util.Properties 类型 --> <property> <value> jdbc.driver.className=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mydb </value> </property> </bean>

Spring容器通过JavaBeans PropertyEditor机制,将<value/>元素内的文本转换为java.util.Properties实例。这是一个很好的捷径,也是Spring团队倾向于使用嵌套<value/>元素而非value属性样式的少数几个场景之一。

Java版的配置详见附录一。

idref元素

idref元素是一种简单且防错的方法,用于将容器中另一个bean的id(一个字符串值,而非引用)传递给<constructor-arg/>或<property/>元素。以下示例展示了如何使用它:

<bean /> <bean> <property> <idref bean="collaborator" /> </property> </bean>

上述 bean 定义片段(在运行时)与以下片段完全等效:

<bean /> <bean> <property value="collaborator" /> </bean>

第一种形式比第二种更可取,因为使用idref标签可以让容器在部署时验证所引用的命名bean确实存在。在第二种变体中,不对传递给客户端Bean的targetName属性的值进行验证。因此,只有在客户端Bean实际实例化时,才会发现拼写错误(这很可能会导致严重后果)。如果客户端Bean是原型Bean,那么这种输入错误以及由此引发的异常可能只有在容器部署很久之后才会被发现。

注意:

<idref/>元素带来价值的一个常见场景(至少在Spring 2.0之前的版本中是这样)是在ProxyFactoryBean bean定义中配置AOP拦截器。在指定拦截器名称时使用<idref/>元素可以防止拼错拦截器ID。

对其他 Bean(协作对象)的引用

ref元素是<constructor-arg/>或<property/>定义元素中的最后一个元素。在此,您将bean的指定属性的值设置为对容器管理的另一个bean(合作者)的引用。被引用的Bean是待设置属性的Bean的依赖项,在设置属性之前,它会根据需要按需初始化。(如果合作者是单例Bean,则容器可能已经对其进行了初始化。)所有引用最终都是对另一个对象的引用。作用域和验证取决于您是通过bean属性还是parent属性来指定另一个对象的ID或名称。

通过<ref/>标签的bean属性指定目标bean是最通用的形式,允许创建对同一容器或父容器中任何bean的引用,无论该bean是否位于同一XML文件中。bean属性的值可能与目标bean的id属性相同,也可能与目标bean的name属性中的某个值相同。以下示例展示了如何使用ref元素:

<ref bean="someBean"/>

通过parent属性指定目标bean会创建一个对当前容器父级容器中bean的引用。parent属性的值可能与目标bean的id属性相同,或者与目标bean的name属性中的某个值相同。目标 bean 必须位于当前 bean 的父容器中。当您拥有容器层次结构并且想要用与父容器中的 bean 同名的代理来包装父容器中的现有 bean 时,应主要使用此 bean 引用变体。以下两个清单展示了如何使用parent属性:

<!--在子(后代)上下文中,bean名称与父bean相同 --> <bean > <property> <ref parent="accountService"/> <!--注意我们如何引用父级bean --> </property> <!--根据需要在此处插入其他配置和依赖项--> </bean>

注意:

在4.0版本的Bean XSD中,ref元素上的local属性已不再受支持,因为它不再为常规Bean引用提供任何价值。在升级到4.0模式时,请将现有的ref local引用更改为ref bean。

Inner Beans

<property/> 或 <constructor-arg/> 元素中的 <bean/> 元素定义了一个内部 bean,如下例所示:

<bean> <!--无需使用对目标bean的引用,只需直接内联定义目标bean即可 --> <property> <bean> <!-- 这是内部bean --> <property value="Fiona Apple"/> <property value="25"/> </bean> </property> </bean>

内部Bean定义不需要已定义的ID或名称。如果指定了,容器也不会将此类值用作标识符。容器在创建时还会忽略scope标志,因为内部Bean始终是匿名的,并且总是与外部Bean一起创建。无法独立访问内部Bean,也无法将它们注入到除封装Bean之外的其他协作Bean中。

作为一种极端情况,有可能从自定义作用域接收销毁回调——例如,对于包含在单例 bean 中的请求作用域内部 bean。内部Bean实例的创建与其包含Bean相关联,但销毁回调使其能够参与请求作用域的生命周期。这种情况并不常见。内部Bean通常只是共享其包含Bean的作用域。

注:在基于java的配置中没有直接的内部Bean定义,可以通过匿名类模仿,Java版的配置详见附录二。

集合

<list/>、<set/>、<map/>和<props/>元素分别用于设置Java集合类型List、Set、Map和Properties的属性和参数。以下示例展示了如何使用它们:

http://www.jsqmd.com/news/350863/

相关文章:

  • Bamtone ICT系列:PCB离子污染检测设备优选
  • 2026年好喝不上头白酒选哪款?8款纯粮发酵白酒专业实测:落口爽净不口干 - 资讯焦点
  • BYOVD漏洞研究:CVE-2026-0828内核驱动漏洞分析与安全研究
  • 研发协同平台:从孤岛到中枢的数字化跃迁
  • 第九篇:特别篇 - 给医院CIO的技术采购指南
  • Java equals与hashCode:从手动重写到Lombok自动化的完整指南
  • 中国大陆主流AIGC视频生成模型技术调研表(2026最新)
  • 19v,3.42A的笔记本电脑可以用pd诱骗器接充电宝充电吗?
  • 什么是PD快充诱骗芯片?以及它是如何从充电器取电5V9V12V15V20V
  • 埃里克森国际MCC大师课:《高管教练》开启深度对话与可持续影响力之旅 - 资讯焦点
  • Marek and Matching (hard version) 题解
  • AI Agent革命:从“嘴炮王“到“行动派“的效率跨越
  • 高温验质,精准赋能——陶瓷材料高温电阻率测试的隐形力量
  • “上网课时微信弹出‘老婆’的消息,全班都看见了...” 录屏不设防,社死在现场!
  • 2026年持妆款粉底液选购指南:6款平价粉底液测评,滋润不卡粉 - 资讯焦点
  • 国内外常见的App分发平台有哪些?
  • 春节coding不停歇,DeepSeek 畅享包3折上线
  • 完整教程:如何看待 AI 加持下的汽车智能化?带来更好体验的同时能否保证汽车安全?
  • Excel数学函数深度解析:SQRT平方根与BASE进制转换的实战应用
  • 建设ChatBI必须先有指标平台吗?对比两种ChatBI技术架构的差异(附选型指南)
  • 西工大《Energy Stor. Mater.》突破:闪蒸焦耳热“三合一”工艺,1秒构筑SiC铠甲,硅负极容量超2600mAh/g
  • 深入解析C4模型与ArchiMate:企业架构可视化中的选择与融合
  • Mysql数据库导入时几种编码格式的不同
  • Office Installer Plus(Office安装工具)
  • 全网最全中望CAD二次开发教程-ZRX
  • 2026年湖北武汉备份软件/防火墙服务商综合选购推荐:湖北杉宇博达科技发展有限公司 - 2026年企业推荐榜
  • OpenClaw 和 Claude Code
  • 洗发水贴牌代加工Top5推荐:功效定制、合规品控,助力品牌市场突围 - 深度智识库
  • 天津展会搭建厂家推荐|津方圆展览:本土硬核实力,参展搭建靠谱之选 - 品牌智鉴榜
  • 惊!汉阳天玑AIGEO优化系统代理机会别错过!