一.DI: Dependency injection; 依赖注入

依赖注入和控制反转是同一个概念的不同说法。

对象的创建依赖于容器。对象属性的设置是由容器来设置。

对象属性的赋值过程称为注入。

二.Spring中如何注入属性:

1.普通属性(String 和 基本数据类型),直接通过 property 设置即可

<bean id="user" class="cn.sxt.vo.User">
<property name="name" value="张三疯"/>
<property name="age" value="22"/>
</bean>

2.数组的设置

<property name="hobbies">
<array>
<value>足球</value>
<value>蓝球</value>
<value>乒乓球</value>
</array>
</property>

3.List 的设置和数组一样

<property name="addreess">
<list>
<value>北京昌平</value>
<value>山西平遥</value>
<value>xxxx</value>
</list>
</property>

或者

<property name="addreess">
<array>
<value>北京昌平</value>
<value>山西平遥</value>
<value>xxxx</value>
</array>
</property>

4. set 集合设置

<property name="books">
<set>
<value>大话设计模式</value>
<value>head.first java</value>
</set>
</property>

5.Map集合设置

<property name="cards">
<map>
<entry key="农业银行">
<value>ABC</value>
</entry>
<entry key="工商银行" value="ICBC"/>
</map>
</property>

6. Properties注入

<property name="appearance">
<props>
<prop key="weight">60kg</prop>
<prop key="height">170cm</prop>
</props>
</property>

7. 对象的注入

<!--
对象的注入 ref引用的是 容器中另外一个对象的标识符
-->
<property name="role" ref="myRole"/>
</bean>
<bean id="myRole" class="cn.sxt.vo.Role">
<property name="id" value="1001"/>
<property name="name" value="管理员"/>
</bean>

8. p 命名空间注入

需要导入头文件

<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
http://www.springframework.org/schema/beans/spring-beans.xsd">

配置

<!-- p-property命名空间的注入 本质是属性,需要为属性提供set方法,只是将属性写bean的属性中 -->
<bean id="r1" class="cn.sxt.vo.Role" p:id="1007" p:name="vip"></bean>

9. c命名空间注入

需要导入头文件

<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"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

配置

<!-- c-constructor命名空间注入 本质是有参构造方法注入,需要提供对应有参构造方法 -->
<bean id="r2" class="cn.sxt.vo.Role" c:id="1006" c:name="普通会员"></bean>

10. Null 注入

<bean id="r3" class="cn.sxt.vo.Role">
<property name="id" value="10"/>
<property name="name"><null/></property>
</bean>

总结:在 spring 中,属性的注入大体上分为两类;

1.构造器注入

2. Set方法注入

需要注意的是:使用构造器注入时,需要提供对应的构造方法;使用 set 方法注入时,需要提供对应的 set 方法。

java之spring之依赖注入的更多相关文章

  1. 在ABAP里模拟实现Java Spring的依赖注入

    Dependency Injection- 依赖注入,在Java Spring框架中有着广泛地应用.通过依赖注入,我们不必在应用代码里繁琐地初始化依赖的资源,非常方便. 那么ABAP能否从语言层面上也 ...

  2. (spring-第3回【IoC基础篇】)spring的依赖注入-属性、构造函数、工厂方法等的注入(基于XML)

    Spring要把xml配置中bean的属性实例化为具体的bean,"依赖注入"是关卡.所谓的"依赖注入",就是把应用程序对bean的属性依赖都注入到spring ...

  3. Spring的依赖注入(DI)三种方式

    Spring依赖注入(DI)的三种方式,分别为: 1.  接口注入 2.  Setter方法注入 3.  构造方法注入 下面介绍一下这三种依赖注入在Spring中是怎么样实现的. 首先我们需要以下几个 ...

  4. java控制反转与依赖注入

    1.简介 依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性,下面通过一个例子来引入这一概念. 2.案例 1)一般情况下的类耦合 Main.java public clas ...

  5. 一步一步深入spring(3)--spring的依赖注入方式

    对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程,sprin ...

  6. spring的依赖注入是什么意思

    最近学习spring框架,对依赖注入有些模糊,遂上网翻阅资料,做了下列总结,原博客为CSDN 南夏的 spring的依赖注入是什么意思,侵删! Spring 能有效地组织J2EE应用各层的对象.不管是 ...

  7. SpringBoot系列: 理解 Spring 的依赖注入(一)

    ==============================Spring 的依赖注入==============================对于 Spring 程序, Spring 框架为我们提供 ...

  8. Spring.NET依赖注入框架学习--简介

    Spring.NET依赖注入框架学习--Spring.NET简介 概述 Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入. ...

  9. Spring.NET依赖注入框架学习--入门

    Spring.NET依赖注入框架学习--入门 在学些Spring.net框架之前,有必要先脑补一点知识,比如什么是依赖注入?IOC又是什么?控制反转又是什么意思?它们与Spring.net又有什么关系 ...

随机推荐

  1. 关于js函数解释(包括内嵌,对象等)

    常用写法: function add(a,b) { return a + b; } alert(add(1,2)); // 结果 3 当我们这么定义函数的时候,函数内容会被编译(但不会立即执行,除非我 ...

  2. 刷题记录:[De1CTF 2019]Giftbox && Comment

    目录 刷题记录:[De1CTF 2019]Giftbox && Comment 一.知识点 1.sql注入 && totp 2.RCE 3.源码泄露 4.敏感文件读取 ...

  3. srs安装与ffmpeg推流

    环境说明:ubuntu 16.04 当前目录为~/. 一. 下载 git clone https://github.com/ossrs/srs.git 二.部署SRS 关闭防火墙,执行如下命令. uf ...

  4. Python开源项目Top30

    原文地址:https://www.cnblogs.com/stoker/p/9101825.html No 1:Home-assistant (v0.6+) 基于Python 3的开源家庭自动化平台[ ...

  5. 真机调试No target device的解决(android studio)3.4.1

    驱动等都正常,手机连接正常.但是还是报错 搜索到如下办法成功解决:adb未启动或启动失败,这时候选择android studio界面底端的logcat,会自动重启adb.

  6. 取response里 Json格式的字段值

    1.

  7. django注释

    转自https://www.cnblogs.com/dayouzi/p/10154815.html Django在HTML里面书写的模板语言不能使用这种方法注释,这样注释实际依然有效 <!--{ ...

  8. 理解 uptime 的:“平均负载”? 如何模拟测试

    每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况.比如像下面这样,我在命令行里输入了 uptime 命令,系统也随即给出了结果. [root@ ...

  9. k8s记录-node组件部署(十)

    1)CA 证书配置登录 192.168.0.1 app 用户下cd ssl/kubernetes#注意修改 KUBE_HOME,BOOTSTRAP_TOKEN #与 3.5 3)token 一致,KU ...

  10. matlab学习笔记12_2创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段

    一起来学matlab-matlab学习笔记12 12_2 结构体 创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段 觉得有用的话 ...