全篇概述:IOC    DI     参数值注入      注解依赖注入

1.Spring IOC
IOC 全称Inversion Of Control,被翻译成控制反转
控制反转指:程序中对象的获取方式发生反转,由最初的通过new关键字方式创建对象,转变为由第三方框架创建,注入(DI),它能降低对象之间的耦合度
第一方:JDK
第二方:开发者
第三方:引入其他人写出的jar包

Spring容器在创建中,采用DI(依赖注入)方式实现IOC控制,IOC是Spring框架的基础和核心

DI全称:Dependency injection,被翻译成依赖注入,
依赖注入的基本原理是将一起工作具有关联关系的对象通过方法参数传入,建立关系,容器的工作就是创建Bean对象时,注入依赖关系

IOC是一种思想,而DI是实现IOC的主要技术途径

DI主要有两种注入方法,即Setter注入和构造器注入

    <!-- Setter注入 属性property,值value -->
<bean id="emp" class="com.xms.entity.Emp">
<property name="id">
<value>404</value>
</property>
<property name="name" value="煲仔兽"></property>
    <!-- 构造器注入 -->
<bean id="dept" class="com.xms.entity.Dept">
<constructor-arg index="0">
<value>500</value>
</constructor-arg>
<constructor-arg index="1" value="调bug部"></constructor-arg>
</bean>
    <!-- 构造器注入 -->
<bean id="dept" class="com.xms.entity.Dept">
<!-- value标签或者属性的值默认时String类型 -->
<!-- type属性时指定参数的类型 -->
<constructor-arg name="id" type="java.lang.Integer">
<value>500</value>
</constructor-arg>
<constructor-arg name="name" value="调bug部"></constructor-arg>
</bean>

自动装配
Spring容器可以自动去装配(autowire)相互协作Bean之间的关联关系,autowire可以针对单个Bean进行设置,方便之处在于减少XML注入的配置

在配置文件中,可以在<bean>标签中使用autowire属性指定自动装配规则,一共有三种类型值
byName:根据属性名自动装配,此选项将检查容器,根据名字来查找与属性名一致的Bean,将其与属性自动装配(Setter注入)
byType:如果容器中存在一个与指定属性类型相同的Bean,则将与此属性自动装配(Setter注入)
constructor:与byName方式类似,不同之处在于它应用于构造器方式(构造器注入)

三种类型值:视情况而定,选择最合适的

2.参数值注入
1)注入基本值
<value>标签可以通过字符串指定属性或构造器参数的值,容器将字符串从默认类型(java.lang.String)
转换成实际的属性或构造器参数类型,然后给Bean对象注入

2)注入Bean对象
注入外部Bean对象(引用方法,方便重用)
ref属性,引入对象的id,     看下方的代码区

3)注入集合
通过<list>,<set>,<map>,<props>标签来定义与Java中对应的List,Set,Map及Properties的属性值
Map和Properties用keyset()方法,返回键值的集合,返回的类型是Set

    <bean class="com.xms.entity.User" id="user">
<property name="id">
<value>201</value>
</property>
<property name="name" value="张无极"></property> </bean> <bean class="com.xms.entity.Demo01" id="demo01">
<!-- 基本值的注入 -->
<property name="id">
<value>110</value>
</property>
<property name="name" value="张丹峰"></property> <!-- Bean对象 -->
<property name="user" ref="user">
</property>
<!-- List -->
<property name="languages">
<list>
<value>Java</value>
<value>javascript</value>
<value>Python</value>
</list>
</property>
<!-- Set -->
<property name="cities">
<set>
<value>苏州</value>
<value>杭州</value>
<value>成都</value>
</set>
</property> <!-- map -->
<property name="scores">
<map>
<entry key="jsd1081">
<value>78</value>
</entry>
<entry key="jsd1805">
<value>86</value>
</entry>
<entry key="jsd1806" value="99">
</entry>
</map>
</property> <!-- Properties -->
<property name="properties">
<props>
<prop key="user">root</prop>
<prop key="password">1234</prop>
</props>
</property> </bean>

4)注入Spring表达式
  Spring表达式语言,和EL表达式在语法上很相似,可以读取一个Bean对象,或者是集合中的数据

    <bean class="com.xms.entity.User" id="user">
<property name="id">
<value>201</value>
</property>
<property name="name" value="张无极"></property> </bean> <bean class="com.xms.entity.Demo01" id="demo01">
<!-- 基本值的注入 -->
<property name="id">
<value>110</value>
</property>
<property name="name" value="张丹峰"></property> <!-- Bean对象 -->
<property name="user" ref="user">
</property>
<!-- List -->
<property name="languages">
<list>
<value>Java</value>
<value>javascript</value>
<value>Python</value>
</list>
</property>
<!-- Set -->
<property name="cities">
<set>
<value>苏州</value>
<value>杭州</value>
<value>成都</value>
</set>
</property> <!-- map -->
<property name="scores">
<map>
<entry key="jsd1081">
<value>78</value>
</entry>
<entry key="jsd1805">
<value>86</value>
</entry>
<entry key="jsd1806" value="99">
</entry>
</map>
</property> <!-- Properties -->
<property name="properties">
<props>
<prop key="user">root</prop>
<prop key="password">1234</prop>
</props>
</property> </bean> <!-- 采用引用的标签注入集合 -->
<!-- 声明集合 -->
<util:list id="list">
<value>Java</value>
<value>javascript</value>
<value>Python</value>
</util:list> <util:set id="set">
<value>苏州</value>
<value>杭州</value>
<value>成都</value>
</util:set> <util:map id="map">
<entry key="jsd1081">
<value>78</value>
</entry>
<entry key="jsd1805">
<value>86</value>
</entry>
<entry key="jsd1806" value="99">
</entry>
</util:map> <util:properties id="properties">
<prop key="user">root</prop>
<prop key="password">1234</prop>
</util:properties> <bean class="com.xms.entity.Demo01" id="demo011">
<!-- 集合 -->
<property name="languages" ref="list"></property>
<property name="cities" ref="set"></property>
<property name="scores" ref="map"></property>
<property name="properties" ref="properties"></property>
</bean> <!-- 加载属性配置文件,框架把properties文件加载成一个Properties集合 -->
<util:properties id="db" location="classpath:db.properties"></util:properties> <bean class="com.xms.entity.Demo02" id="demo02">
<property name="name" value="#{user.name}"></property>
<property name="language" value="#{demo01.languages[1]}"></property>
<property name="city" value="#{set[0]}"></property>
<property name="score" value="#{map.jsd1805}"></property>
<property name="pageSize" value="#{db.PAGE_SIZE}"></property>
</bean>

5)注入NULL或空字符串                  了解
Spring将属性的空参数当做空String

<bean>
<property name="name" value="" />
</bean>

如果需要注入NULL,可以使用NULL标签

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

3.基于注解依赖注入
具有依赖关系的Bean对象,可以使用以下任意一种注解实现注入
@Autowired/@Qualifer 组合
可以处理构造器注入和Setter注入
@Autowired写在构造器或set方法前,声明需要为其注入Bean对象
@Qualifer写在参数前面,声明注入Bean的id

@Resource

11

SpringMyBatisDay02的更多相关文章

随机推荐

  1. 【19道XSS题目】不服来战!(转)

    [19道XSS题目]不服来战! 记得第一次接触xss这个概念是在高中,那个时候和一个好基友通过黑客X档案和黑客手册.第一次接触到了除了游戏以外的电脑知识,然后知道了,原来电脑除了玩游戏还可以搞这些,从 ...

  2. css3整理--border-radius

    1.border-radius 标准: border-top-left-radius: x y // 左上角,x 圆角水平半径, y 圆角垂直半径 border-top-right-radius:x ...

  3. 跟bWAPP学WEB安全(PHP代码)--SSL(Server-Side-Include)漏洞

    什么是Server-Side-Include漏洞 服务端包含漏洞是指发送指令到服务器,服务器会将指令运行完,把运行结果包含在返回文件中发送给你.利用这种漏洞可以获取服务端的信息甚至执行命令,这样的指令 ...

  4. ASP.NET MVC View使用Conditional compilation symbols

    由于View(.cshtml)的运行时编译关系,在项目级别中定义的symbols是无法被直接使用的.需要在Web.config中添加compilerOptions(在View目录下的Web.confi ...

  5. 使用Btrace来动态监控方法的参数和返回值

    btrace简介: btrace是一种动态跟踪分析一个运行中的Java应用程序的工具,它基于java的探针技术动态地向目标应用程序的字节码注入追踪代码(字节码追踪),这些追踪字节码追踪代码使用Java ...

  6. C# 递归与非递归算法与数学公式

    1.递归 递归:程序调用自身的编程技巧称为递归(recursion). 优点是:代码简洁,易于理解. 缺点是:运行效率较低. 递归思想:把问题分解成规模更小,但和原问题有着相同解法的问题. 1)下面是 ...

  7. Spark2 文件处理和jar包执行

    上传数据文件 mkdir -p data/ml/ hadoop fs -mkdir -p /datafile/wangxiao/ hadoop fs -ls / hadoop fs -put /hom ...

  8. centos6.9环境下JDK安装部署

    1.准备jdk安装文件: 这里我使用的是 jdk-7u79-linux-x64.tar.gz 2.在 /usr/local 目录下创建 sotfware目录,并上传JDK文件: 解压文件并修改文件夹为 ...

  9. 安装支持eigen线性迭代的ceres_solver

    Ceres可以求解以下形式的有界约束非线性最小二乘问题: 这种形式的问题来源于科学工程的多个领域,从统计学的曲线拟合到计算机视觉中从图像中构建三维模型. 最近在做sfm方面的重建问题,需要对得到的相机 ...

  10. 用纯css实现下拉菜单的几种方式

    第一种:display:none和display:block切换 <!DOCTYPE html> <html lang="en"> <head> ...