DI(依赖注入)

1.DI概念

DI即依赖注入,就是将SpringIOC创建的对象进行属性的设置。

DI有两种方式:
设置器注入
构造器注入

2.设置器注入

利用javabean的set方法进行属性注入

保证javabean的属性具有set设置器:
     特别注意,类属性 不等于 javabean的bean属性
    javabean的bean属性只看是否提供了set或get方法

a.基本类型的注入

基本数据类型、String类型性

<!--基本类型(基本数据类型、String类型)设置-->
<property name="name"value="zs"></property>
<property name="age"value="19"></property>
b.集合类型的注入
<!--集合类型-->
<property name="list"><list><value>v1</value><value>v2</value><value>v3</value></list>
</property>
<property name="set"><set><value>v1</value><value>v2</value><value>v3</value><value>v2</value></set>
</property>
c.map类型注入
<!--Map类型-->
<property name="map"><map><entrykey="k1"value="v1"></entry><entrykey="k2"value="v2"></entry><entrykey="k3"value="v3"></entry><entrykey="k2"value="v4"></entry></map>
</property>
d.Properties类型注入
<!--Properties-->
<property name="props"><props><propkey="pk1">pv1</prop><propkey="pk2">pv2</prop><propkey="pk3">pv3</prop></props>
</property>
e.自定义bean的注入
<bean id="dog"class="cn.xxxx.domain.Dog"><propertyname="name"value="旺财"></property><propertyname="age"value="5"></property>
</bean><bean id="cat"class="cn.xxxx.domain.Cat"><propertyname="name"value="汤姆"></property><propertyname="age"value="4"></property>
</bean>
<bean id="hero"class="cn.xxxx.domain.Hero"><propertyname="name"value="亚瑟"></property><propertyname="age"value="55"></property><propertyname="dog"ref="dog"></property><propertyname="cat"ref="cat"></property>
</bean>
f.自定义bean的注入 - 自动装配
byName 根据当前bean的bean属性名寻找该id的bean进行注入
byTaype 根据当前bean的bean属性类型寻找该类型的bean记性注入,这种方式如果找到多个bean则抛出异常
<bean id="dog"class="cn.xxxx.domain.Dog"><propertyname="name"value="旺财"></property><propertyname="age"value="5"></property>
</bean><bean id="cat"class="cn.xxxx.domain.Cat"><propertyname="name"value="汤姆"></property><propertyname="age"value="4"></property>
</bean><bean id="tiger1"class="cn.xxxx.domain.Tiger"><propertyname="name"value="跳跳虎"></property><propertyname="age"value="9"></property>
</bean><bean id="tiger2"class="cn.xxxx.domain.Tiger"><propertyname="name"value="小帅虎"></property><propertyname="age"value="8"></property>
</bean><!--
自动装配-自动进行自定义bean类型的属性设置byName
找到和当前bean的javabean属性名相同的id的bean,自动设置byType
找到和当前bean的javabean属性类型相同的bean,自动设置
**由于Spring容易可以配置多个id不同但类型相同的bean,所以通过ByType方式自动装配bean的时候,有可能同一个属性找到多个对应的bean,此时会抛出异常
--><bean id="hero"class="cn.xxxx.domain.Hero"autowire="byType"><propertyname="name"value="亚瑟"></property><propertyname="age"value="55"></property><!--<propertyname="dog"ref="dog"></property><propertyname="cat"ref="cat"></property><propertyname="tiger"ref="tiger"></property>--></bean>

3.基于构造器的注入

有的bean没有set方法而是通过构造方法进行属性设置的,此时Spring同样支持通过构造 器进行属性注入。

package cn.xxxx.domain;public class Person {private String name;private int age;private Dog dog;public Person() {}public Person(String name, int age, Dog dog) {this.name = name;this.age = age;this.dog = dog;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", dog=" + dog +'}';}
}

进行配置:

<bean id="dog" class="cn.xxxx.domain.Dog"><property name="name" value="旺财"></property><property name="age" value="5"></property>
</bean><bean id="person" class="cn.xxxx.domain.Person"><!--name:为构造器中的哪个名字的参数设定值type:为构造器中的哪个类型的参数设定值index:为构造器中第几个参数设定值,以0开始value:为该属性设定什么值ref:如果参数为自定义bean类型,通过ref引用自定义bean类型--><constructor-arg name="name" type="java.lang.String" index="0" value="zs" ></constructor-arg><constructor-arg name="age" value="19"></constructor-arg><constructor-arg index="2" ref="dog"></constructor-arg></bean>

大家看到这里是不是会觉得框架不是说很方便吗?怎么这么麻烦。下次我们开始说注解方式的实现。今天先到这里,我们下次见。

                                                                         ------在下亦从文,弃武从文

SSM三大框架从0到1,无障碍学习,萌新可入《二》相关推荐

  1. SSM三大框架从0到1,无障碍学习,萌新可入《一》

    框架概述 1.框架的概念 所谓的框架其实就是程序的架子. 把web开发中和业务无关的重复部分提取成通用的程序的架子,就是框架. 2.javaweb开发中的框架SSH 老三大框架:SSH Struts2 ...

  2. (Spring+SpringMVC+MyBatis)SSM三大框架整合教程

    目录 一.基本概念 1.Spring 2.SpringMVC 3.MyBatis 二.开发环境搭建 三.Maven Web项目创建 四.SSM整合 1.Maven引入需要的JAR包 2.Spring与 ...

  3. SSM三大框架+SpringMVC的工作原理及其流程

    SSM三大框架+SpringMVC的工作原理及其流程 一.SSM中各层作用及关系 1.持久层:DAO层(mapper层)(属于mybatis模块)     DAO层(Mapper层):主要负责与数据库 ...

  4. JavaEE ssm三大框架黑马视频

    链接:https://pan.baidu.com/s/1JysWR5eZ49cDRtrDIJqcBQ 密码:diyr ** 里面包含 ** spring .mybatis .springmvc以及这三 ...

  5. SSM三大框架超详细总结(适合你重新回顾)

    目录 1.1 概念 1.2 Mybatis优点 1.3 Mybatis架构 1.4 底层原理 1.5 Mybatis缓存 1.6 常见面试题 2.1 概念 2.2 Spring优点 2.3 Sprin ...

  6. SSM三大框架整合(Spring+SpringMVC+MyBatis)

    文章目录 SSM整合 一.导入依赖 1.1 Spring依赖 1.2 SpringMVC依赖 1.3 MyBatis依赖 二.配置文件 2.0 Web.xml 配置文件 2.1 Spring的配置文件 ...

  7. 通俗易懂-SSM三大框架整合案例(SpringMVC+Spring+Mybatis)

    前言: 学习B站UP狂神说视频笔记整理视频链接 相关代码已经上传至码云:码云链接 前期准备 项目介绍 demo项目是一个简单的图书管理系统,主要功能为表单数据的增删改查 Web端使用JSP+Boots ...

  8. SSM三大框架的运行流程、原理、核心技术详解!

    一.Spring部分 1.Spring的运行流程 第一步:加载配置文件ApplicationContext ac = new ClassPathXmlApplicationContext(" ...

  9. SSM三大框架整合Springfox(Swagger2)详细解决方案

    由于项目中使用的是前后端分离,所以,频繁的需要进行数据的交互和接口的调用,所以需要api文档的使用,这样就更加的方便,于是就找到了swagger这个东东,还是很好用.下面介绍一下如何整合到spring ...

最新文章

  1. myeclise 安装
  2. ruby1.8.6 安装watir是出现问题记录
  3. 云计算呼叫中心_SaaS云呼叫中心系统只用于销售或客服?
  4. kodi android 键盘,KODI按键映射,看IPTV按键设置
  5. 科发财务凭证登陆出现错误:40002
  6. drools 7.x 决策表转drl
  7. (二)PowerLink理论知识
  8. hue 安装 + authrization manager安装
  9. sql select 0 字段 某字段是不在指定的表
  10. 用C语言调用.bat批处理命令
  11. Feem(局域网文件传输工具)v4.3.0官方版
  12. LeapFTP 显示服务器端文件名乱码问题处理
  13. 基于微信小程序的西餐外卖系统的设计与实现NodeJS-计算机毕业设计
  14. 如何批量制作准考证——《超级处理器》应用
  15. 精确率(precision)、召回率(recall)、准确率(accuracy)
  16. 甲骨文混合云战略融合数据库技术
  17. 【GANs学习笔记】(二)GANs大家族分类
  18. P0口与其他口的区别
  19. 【转载】 Android MediaCodec stuff
  20. 关于爬取企业信息类的爬虫(一)

热门文章

  1. asp.net 页面清除缓存
  2. 如果你来投票决定百度的生死,你会如何抉择?
  3. 离散数学笔记(一)数理逻辑
  4. 量化交易:10000资金起步,五年看看能做到多少?
  5. LTE Paging
  6. 比较两个Integer的值是否相等
  7. html+css+js实现文本编辑器
  8. 微擎应用之医院挂号专家 微官网的实现
  9. java 字符串 数组 索引_如何在Java中找到数组中元素的索引?
  10. Windows利用cmd循环文件文本内容自动创建对应文件