前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring 的属性注入

Spring 的属性注入

作者头像
希希里之海
发布2019-06-18 18:50:02
1K0
发布2019-06-18 18:50:02
举报
文章被收录于专栏:weixuqin 的专栏weixuqin 的专栏

Spring 的属性注入

Spring 的属性注入,我们可以理解成之前说过的 DI (依赖注入)。

注入方式

对于类成员变量,注入方式有三种:

  • 构造函数注入
  • 属性 setter 注入
  • 接口注入

spring 支持前两种注入方式


1. 构造方法注入

  • 通过构造方法注入 Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用
  • 构造器注入在 ``` 元素里声明的属性

举个例子:

代码语言:javascript
复制
<!-- Bean 的构造方法的属性注入 -->
<bean id="user" class="com.test.ioc.demo4.User">
    <constructor-arg name="name" value="张三" />
    <constructor-arg name="age" value="23" />
</bean>

具体代码:SpringDemo4.demo1()


2. set 方法注入

  • 使用 set 方法注入,在 Spring 配置文件中,通过 设置注入的属性

举个例子:

代码语言:javascript
复制
<!-- Bean 的 set 方法的属性注入 -->
<bean id="person" class="com.test.ioc.demo4.Person">
    <property name="name" value="张三" />
    <property name="age" value="23" />
    <property name="cat" ref="cat" />
</bean>

<bean id="cat" class="com.test.ioc.demo4.Cat">
    <property name="name" value="ketty" />
</bean>

其中:

ref 用来引入其他 bean 的 id 或 name 普通类型的值使用 value 对象类型的值使用 ref

具体代码:SpringDemo4.demo2()


3. p 名称空间注入

  • 使用 p 命名空间
  • 为了简化 XML 文件配置,Spring 从 2.5 开始引入一个新的 p 名称空间
  • p:<属性名>="xxx" 引入常量值
  • p:<属性名>-ref="xxx" 引入其他 Bean 对象

举个例子:

代码语言:javascript
复制
<!-- Bean 的 p 名称空间的属性注入 -->
<bean id="person" class="com.test.ioc.demo4.Person" p:name="张三" p:age="23" p:cat-ref="cat" />
<bean id="cat" class="com.test.ioc.demo4.Cat" p:name="阿黄"/>

具体代码:SpringDemo4.demo2()

注意: 如果使用 p 名称空间注入,我们需要在 xml 文件开头的加入一句:

代码语言:javascript
复制
xmlns:p="http://www.springframework.org/schema/p"

表示引入 p 名称空间注入方式。


4. SpEL 注入

  • SpEL:spring expression language,spring 表达式语言,对依赖注入进行简化
  • 语法:#{表达式}
  • <bean id="" value="#{表达式}">

SpEL 表达式语言:

代码语言:javascript
复制
语法:#{}

#{'hello'}:使用字符串

#{topicId3}:使用另一个 bean

#{topicId4.content.toUpperCase()}:使用指定名属性,并使用方法

#{T(java.lang.Math).PI}:使用静态字符或方法

举个例子:

代码语言:javascript
复制
<!-- Bean 的 SpEL 的属性注入 -->
<bean id="category" class="com.test.ioc.demo4.Category">
    <property name="name" value="#{'服装'}" />
</bean>

<bean id="productInfo" class="com.test.ioc.demo4.ProductInfo" />

<bean id="product" class="com.test.ioc.demo4.Product">
    <property name="name" value="#{'男装'}" />
    <property name="price" value="#{productInfo.calculatePrice()}" />
    <property name="category" value="#{category}" />
</bean>

具体代码:SpringDemo4.demo3()


5. 复杂类型的属性注入

  • 数组类型的属性注入
  • List 集合类型的属性注入
  • Set 集合类型的属性注入
  • Map 集合类型的属性注入
  • Properties 类型的属性注入

举个例子:

代码语言:javascript
复制
<!-- 集合类型的属性注入 -->
<bean id="collectionBean" class="com.test.ioc.demo5.CollectionBean">
    <!-- 数组类型 -->
    <property name="arrs">
        <list>
            <value>aaa</value>
            <value>bbb</value>
            <value>ccc</value>
        </list>
    </property>
    <!-- List 类型 -->
    <property name="list">
        <list>
            <value>111</value>
            <value>222</value>
            <value>333</value>
        </list>
    </property>
    <!-- Set 类型 -->
    <property name="set">
        <set>
            <value>ddd</value>
            <value>eee</value>
            <value>fff</value>
        </set>
    </property>
    <!-- Map 类型 -->
    <property name="map">
        <map>
            <entry key="aaa" value="111" />
            <entry key="bbb" value="222" />
            <entry key="ccc" value="333" />
        </map>
    </property>
    <!-- Properties 类型 -->
    <property name="properties">
        <props>
            <prop key="username">root</prop>
            <prop key="password">1234</prop>
        </props>
    </property>
</bean>

具体代码:SpringDemo5.demo1()

复杂类型的属性注入,主要是在 Spring 整合其他框架的时候,会比较常用到。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring 的属性注入
    • 注入方式
      • 1. 构造方法注入
        • 2. set 方法注入
          • 3. p 名称空间注入
            • 4. SpEL 注入
              • 5. 复杂类型的属性注入
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档