我是靠谱客的博主 友好口红,最近开发中收集的这篇文章主要介绍Spring的依赖注入,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1 依赖注入之setter注入

配置bean时为属性赋值:

<bean id="studentOne" class="com.atguigu.spring.bean.Student">
  <!-- property标签:通过组件类的setXxx()方法给组件对象设置属性 -->
  <!-- name属性:指定属性名(这个属性名是getXxx()、setXxx()方法定义的,和成员变量无关)
-->
  <!-- value属性:指定属性值 -->
  <property name="id" value="1001"></property>
  <property name="name" value="张三"></property>
  <property name="age" value="23"></property>
  <property name="sex" value="男"></property>
</bean>

2 依赖注入之构造器注入:

<bean id="studentTwo" class="com.atguigu.spring.bean.Student">
  <constructor-arg value="1002"></constructor-arg>
  <constructor-arg value="李四"></constructor-arg>
  <constructor-arg value="33"></constructor-arg>
  <constructor-arg value="女"></constructor-arg>
</bean>

注意:
constructor-arg标签还有两个属性可以进一步描述构造器参数:
index属性:指定参数所在位置的索引(从0开始)
name属性:指定参数名

3 依赖注入之特殊值处理:

①字面量赋值
什么是字面量?
int a = 10;
声明一个变量a,初始化为10,此时a就不代表字母a了,而是作为一个变量的名字。当我们引用a
的时候,我们实际上拿到的值是10。
而如果a是带引号的:'a',那么它现在不是一个变量,它就是代表a这个字母本身,这就是字面
量。所以字面量没有引申含义,就是我们看到的这个数据本身。

<!-- 使用value属性给bean的属性赋值时,Spring会把value属性的值看做字面量 -->
<property name="name" value="张三"/>

②null值

<property name="name">
  <null />
</property>

<property name="name" value="null"></property>   这样不行,会赋值为字符串“null”。

③xml实体

<!-- 小于号在XML文档中用来定义标签的开始,不能随便使用 -->
<!-- 解决方案一:使用XML实体来代替 -->
<property name="expression" value="a &lt; b"/>

④CDATA节

<property name="expression">
  <!-- 解决方案二:使用CDATA节 -->
  <!-- CDATA中的C代表Character,是文本、字符的含义,CDATA就表示纯文本数据 -->
  <!-- XML解析器看到CDATA节就知道这里是纯文本,就不会当作XML标签或属性来解析 -->
  <!-- 所以CDATA节中写什么符号都随意 -->
  <value><![CDATA[a < b]]></value>
</property>
<!--
<:&lt;
>:&gt;
CDATA节其中的内容会原样解析<![CDATA[...]]>
CDATA节是xml中一个特殊的标签,因此不能写在一个属性中
-->

4 依赖注入之为类类型的属性赋值

方法一,引用外部的bean:

<bean id="clazzOne" class="com.atguigu.spring.bean.Clazz">
  <property name="clazzId" value="1111"></property>
  <property name="clazzName" value="财源滚滚班"></property>
</bean>
<bean id="studentFour" class="com.atguigu.spring.bean.Student">
  <property name="id" value="1004"></property>
  <property name="name" value="赵六"></property>
  <property name="age" value="26"></property>
  <property name="sex" value="女"></property>
  <!-- ref属性:引用IOC容器中某个bean的id,将所对应的bean为属性赋值 -->
  <property name="clazz" ref="clazzOne"></property>
</bean>

方法二、内部bean:

<bean id="studentFour" class="com.atguigu.spring.bean.Student">
  <property name="id" value="1004"></property>
  <property name="name" value="赵六"></property>
  <property name="age" value="26"></property>
  <property name="sex" value="女"></property>
  <property name="clazz">
    <!-- 在一个bean中再声明一个bean就是内部bean -->
    <!-- 内部bean只能用于给属性赋值,不能在外部通过IOC容器获取,因此可以省略id属性 -->
    <bean id="clazzInner" class="com.atguigu.spring.bean.Clazz">
      <property name="clazzId" value="2222"></property>
      <property name="clazzName" value="远大前程班"></property>
    </bean>
  </property>
</bean>

内部bean只能在当前bean内部使用,不能使用IOC容器获取。 

方法三、级联方式(用的少):

<bean id="clazzOne" class="com.atguigu.spring.bean.Clazz">
  <property name="clazzId" value="1111"></property>
  <property name="clazzName" value="财源滚滚班"></property>
</bean>
<bean id="studentFour" class="com.atguigu.spring.bean.Student">
  <property name="id" value="1004"></property>
  <property name="name" value="赵六"></property>
  <property name="age" value="26"></property>
  <property name="sex" value="女"></property>
  <!-- 一定先引用某个bean为属性赋值,才可以使用级联方式更新属性 -->
  <property name="clazz" ref="clazzOne"></property>
  <property name="clazz.clazzId" value="3333"></property>
  <property name="clazz.clazzName" value="最强王者班"></property>
</bean>

5 依赖注入之为数组类型的属性赋值

hobbies属性是数组类型

<bean id="studentFour" class="com.atguigu.spring.bean.Student">
  <property name="id" value="1004"></property>
  <property name="name" value="赵六"></property>
  <property name="age" value="26"></property>
  <property name="sex" value="女"></property>
  <!-- ref属性:引用IOC容器中某个bean的id,将所对应的bean为属性赋值 -->
  <property name="clazz" ref="clazzOne"></property>
  <property name="hobbies">
    <array>
      <value>抽烟</value>
      <value>喝酒</value>
      <value>烫头</value>
    </array>
  </property>
</bean>

6 依赖注入之为集合类型的属性赋值

students属性是集合类型,集合中是student类。 

<bean id="studentOne" class="com.atguigu.spring.pojo.Student"></bean>
<bean id="studentTwo" class="com.atguigu.spring.pojo.Student">
<property name="sid" value="1001"></property>
<property name="sname" value="张三"></property>
<property name="age" value="23"></property>
<property name="gender" value="男"></property>
</bean>
<bean id="studentThree" class="com.atguigu.spring.pojo.Student">
<constructor-arg value="1002"></constructor-arg>
<constructor-arg value="李四"></constructor-arg>
<constructor-arg value="女"></constructor-arg>
<constructor-arg value="24" name="age"></constructor-arg>
</bean>
<bean id="clazzTwo" class="com.atguigu.spring.bean.Clazz">
  <property name="clazzId" value="4444"></property>
  <property name="clazzName" value="最强王者班"></property>
  <property name="students">
    <list>
      <ref bean="studentOne"></ref>
      <ref bean="studentTwo"></ref>
      <ref bean="studentThree"></ref>
    </list>
  </property>
</bean
配置一个集合类型的bean,需要使用util的约束
<util:list id="studentList">
<ref bean="studentOne"></ref>
<ref bean="studentTwo"></ref>
<ref bean="studentThree"></ref>
</util:list>
<bean id="clazzTwo" class="com.atguigu.spring.bean.Clazz">
  <property name="clazzId" value="4444"></property>
  <property name="clazzName" value="最强王者班"></property>
  <property name="students" ref="studentList"></property>
</bean

 7 依赖注入之为map类型的属性赋值

<bean id="teacherOne" class="com.atguigu.spring.bean.Teacher">
  <property name="teacherId" value="10010"></property>
  <property name="teacherName" value="大宝"></property>
</bean>
<bean id="teacherTwo" class="com.atguigu.spring.bean.Teacher">
  <property name="teacherId" value="10086"></property>
  <property name="teacherName" value="二宝"></property>
</bean>
<bean id="studentFour" class="com.atguigu.spring.bean.Student">
  <property name="id" value="1004"></property>
  <property name="name" value="赵六"></property>
  <property name="age" value="26"></property>
  <property name="sex" value="女"></property>
  <!-- ref属性:引用IOC容器中某个bean的id,将所对应的bean为属性赋值 -->
  <property name="clazz" ref="clazzOne"></property>
  <property name="hobbies">
    <array>
      <value>抽烟</value>
      <value>喝酒</value>
      <value>烫头</value>
    </array>
  </property>
  <property name="teacherMap">
<map>
<entry key="10086" value-ref="teacherOne"></entry>
<entry key="10010" value-ref="teacherTwo"></entry>
</map>
</property>
</bean>

配置一个map类型的bean的使用方法和集合的用法一致。

7 依赖注入之p命名空间                ·

p是一个约束 

<bean id="studentSix" class="com.atguigu.spring.pojo.Student"
p:sid="1005" p:sname="小明" p:teacherMap-ref="teacherMap"></bean>

最后

以上就是友好口红为你收集整理的Spring的依赖注入的全部内容,希望文章能够帮你解决Spring的依赖注入所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部