Spring Inner Bean

举报
赵KK日常技术记录 发表于 2023/06/30 23:28:52 2023/06/30
【摘要】 # Spring Inner Bean(内嵌Bean)SpringIOC容器在实例化Bean的时候,采用的是深度优先策略。也就是说,如果一个Bean存在于另一个Bean的配置定义内,那么内部Bean将优先得到实例化。这种内部Bean的定义方式就称为Inner Bean(内嵌Bean)。## 定义方式在Spring配置文件中,可以使用下列两种方式定义 Inner Bean:### <bean>...
# Spring Inner Bean(内嵌Bean)SpringIOC容器在实例化Bean的时候,采用的是深度优先策略。也就是说,如果一个Bean存在于另一个Bean的配置定义内,那么内部Bean将优先得到实例化。这种内部Bean的定义方式就称为Inner Bean(内嵌Bean)。## 定义方式在Spring配置文件中,可以使用下列两种方式定义 Inner Bean:### <bean> 元素方式
xml
<bean id="outerBean" class="...">  
  <property name="accountNumber">  
    <bean class="com....")>
      ... 
    </bean>
  </property>   
</bean>
<bean> 元素定义了 inner bean,使用 outerBean 的 accountNumber 属性进行注入。### 内部bean定义
xml
<bean id="outerBean" class="...">  
  <property name="accountNumber">
    <bean class="com.">
      <property name="bankName" value="..." />  
    </bean>
  </property>
</bean>  
内部bean采用`<bean>`的写法定义,但是没有id属性。## 特点- Inner Bean拥有独立的作用域。
- Inner Bean的生命周期依赖于外部Bean。外部Bean被销毁时,Inner Bean也会被销毁。
- Inner Bean可以互相引用。
- Inner Bean可以访问外部Bean的属性和方法。## 使用时机我们通常在需要满足以下要求的时候使用Inner Bean:- 一个Bean需要注入到另一个Bean的属性中。
- 内部Bean的作用域仅限于外部Bean的生命周期内。
- 不需要为内部Bean指定ID。## 示例
xml
<bean id="accountService" class="AccountService">  
  <property name="accountDao">
    <bean id="accountDao" class="AccountDao" >
      <!-- 依赖注入 -->
    </bean>
  </property>
</bean>
上述示例中,accountDao是`accountService`的内部Bean,它们的生命周期相同。`accountDao`注入到`accountService`的属性中。总的来说,Spring Inner Bean可以很方便的将复杂Bean的属性注入另一个Bean,降低耦合度。使用Inner Bean时需要注意:- Inner Bean的访问范围仅限外部Bean。
- Inner Bean的生命周期依赖于外部Bean。此外Inner Bean还可以嵌套Inner Bean,Spring IOC容器会采用深度优先策略实例化这些Bean。 
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。