Spring框架(二)实例化.DI.注入.EL的表达式

版权声明:cxyo.cn https://blog.csdn.net/weixin_44075537/article/details/85037047
目录:
2.单例对象的 延迟实例化
3.什么是DI
4.实现DI的方式
5.bean 参数的注入
6.Spring 中的EL的表达式

1.定义一个扑克牌类 Card

有两个成员变量 String suit String point
提供get set方法
无参构造 全参构造
toString
序列化
在容器中创建这个类型的对象
并获取这个对象 打印。

定义一个玩家类 Player

有四个成员变量 int id String name double money Card
card 提供get set方法
无参构造 全参构造
toString
序列化
在容器中创建这个类型的对象
并获取这个对象 打印。

2.单例对象的 延迟实例化

可以通过bean 标记的 lazy-init 属性 这个属性默认是false 指定成true 就延迟实例化

3.什么是DI

Dependence Injection 依赖注入(依赖注射)
    一个组件对象 需要一份数据 或者是另外一个对象时 通过一定的手段 把数据设置到合适位置的过程 叫依赖注入。
    它的作用 就是解决 容器中组件的装配问题。

4.实现DI的方式

4.1 setter 注入

    这种方式 参考的是 set方法 具体的参考准则是 去掉set 然后首字母小写。

     <property   name="属性名"    value="值" />    

    value 适合赋值简单值(八种基本类型 以及封装类 String 枚举)
    如果是其它的复杂值则需要使用 ref 进行赋值 ref的值就是容器中的组件id。

4.2 构造器注入
    这种方式 参考的是 构造方法 看构造方法对应的参数
    把property 换成 constructor-arg name 就是参数名
    除了使用name 指定参数 还可以使用 index 指定参数 下标从0开始

4.3 自动注入
    一般是用来解决复杂值的注入问题
    在bean 标记中 加一个 autowire 属性 取值有 byName
    通过容器中组件id 和 属性名一致来完成装配。
    还可以取值 byType 根据成员变量对应的类型 来进行匹配 但是类型可能会冲突。
    constuctor 采用构造方法匹配 并且这个优先使用 类型匹配 如果有冲突 则启用名字查找 。

5.bean 参数的注入

5.1 简单的参数值注入
    八种基本类型 和 对应的封装类
    以及String
    还有枚举 都使用 value 注入即可
    也可以value 标记赋值
    还可以使用 代表空值
5.2 复杂值的参数注入
    把上面的 value 换成 ref 即可

5.3 集合类型的参数注入

    java中的 List Set Map Properties 这些集合都可采用配置文件的标记来进行注入。

    List  ----  <list> <value> </value><value> </value> </list> Set   ----  <set> <value> </value><value> </value> </set> Map   ----- <map> <entry  key=""  value="" />  </map> Properties --  <props> <prop   key="" > 值</prop>  </props> 

5.4 集合的单独定义

<util:list   id="集合标识" > <value> </value><value> </value>  </util:list> Set Map   都类似     比较特殊的是 Properties <util:properties id="ref_phones2">     <prop key="110112119911">jack马</prop>     <prop key="110112119919">李伟杰</prop>     <prop key="110112119918">李元霸</prop> </util:properties> 

5.5 单独定义 Properties 关联一个.properties 文件

6.Spring 中的EL的表达式

这个表达式从spring 容器中取值 语法是 把之前的$换成 #

猜你喜欢

转载自blog.csdn.net/weixin_44075537/article/details/85037047