Spring学习笔记(三):注入

    技术2022-07-11  100

    Spring学习笔记(三):注入

    1. 什么是注入2.如何进行注入[开发步骤]3.Spring注⼊的原理分析(简易版)4.Set注⼊详解5.⽤户⾃定义类型6.Set注⼊的简化写法1. 基于属性简化2. 基于p命名空间简化 7.构造注⼊开发步骤构造⽅法重载

    1. 什么是注入

    通过Spring⼯⼚及配置⽂件,为所创建对象的成员变量赋值 为什么需要注⼊? 通过编码的⽅式,为成员变量进⾏赋值,存在耦合

    2.如何进行注入[开发步骤]

    类的成员变量提供set get⽅法配置spring的配置⽂件 <bean id="person" class="com.baizhiedu.basic.Person"> <property name="id"> <value>10</value> </property> <property name="name"> <value>xiaojr</value> </property> </bean>

    3.Spring注⼊的原理分析(简易版)

    Spring通过底层调⽤对象属性对应的set⽅法,完成成 员变量的赋值,这种⽅式我们也称之为set注⼊

    4.Set注⼊详解

    针对于不同类型的成员变量,在< property >标签,需要嵌套其他标签 JDK内置类型 String+8种基本类型 <value>suns</value> 数组 <list> <value>suns@zparkhr.com.cn</value> <value>liucy@zparkhr.com.cn</value> <value>chenyn@zparkhr.com.cn</value> </list> Set集合 <set> <value>11111</value> <value>112222</value> </set> <set> <ref bean <set </set> List集合 <list> <value>11111</value> <value>2222</value> </list> <list> <ref bean <set </list> Map集合 注意: map -- entry -- key有特定的 标签 <key></key> 值根据对应类 型选择对应类型的标签 <map> <entry> <key><value>suns</value></key> <value>3434334343</value> </entry> <entry> <key><value>chenyn</value> </key> <ref bean </entry> </map> Properites(Properties类型 特殊的Map key=Stringvalue=String) <props> <prop key="key1">value1</prop> <prop key="key2">value2</prop> </props> 复杂的JDK类型 (Date)需要程序员⾃定义类型转换器,处理。

    5.⽤户⾃定义类型

    第⼀种⽅式 为成员变量提供set get⽅法配置⽂件中进⾏注⼊(赋值) <bean id="userService" class="xxxx.UserServiceImpl"> <property name="userDAO"> <bean class="xxx.UserDAOImpl"/> </property> </bean> 第⼆种⽅式 第⼀种赋值⽅式存在的问题配置⽂件代码冗余,被注⼊的对象(UserDAO),多次创建,浪费JVM内存资源为成员变量提供set get⽅法配置⽂件中进⾏配置 <bean id="userDAO" class="xxx.UserDAOImpl"/> <bean id="userService" class="xxx.UserServiceImpl"> <property name="userDAO"> <ref bean="userDAO"/> </property> </bean> #Spring4.x 废除了 <ref local=""/> 基本等效 <ref bean=""/>

    6.Set注⼊的简化写法

    1. 基于属性简化

    JDK类型注⼊ <property name="name"> <value>suns</value> </property> 简化之后 <property name="name" value="suns"/> 注意:value属性 只能简化 8种基本类型+String 注⼊标签 ⽤户⾃定义类型 <property name="userDAO"> <ref bean="userDAO"/> </property> 简化之后 <property name="userDAO" ref="userDAO"/>

    2. 基于p命名空间简化

    JDK类型注⼊ <bean id="person" class="xxxx.Person"> <property name="name"> <value>suns</value> </property> </bean> 简化之后(p:就相当于property标签) <bean id="person" class="xxx.Person" p:name="suns"/> 注意:value属性 只能简化 8种基本类型 +String 注⼊标签 ⽤户⾃定义类型 <bean id="userService" class="xx.UserServiceImpl"> <property name="userDAO"> <ref bean="userDAO"/> </property> </bean> 简化之后 <bean id="userService" class="xxx.UserServiceImpl" p:userDAO-ref="userDAO"/>

    7.构造注⼊

    注⼊:通过Spring的配置⽂件,为成员变量赋值Set注⼊:Spring调⽤Set⽅法 通过配置⽂件为成员变量赋值构造注⼊:Spring调⽤构造⽅法 通过配置⽂件为成员变量赋值

    开发步骤

    提供有参构造⽅法 public class Customer implements Serializable { private String name; private int age; public Customer(String name,int age) { this.name = name; this.age = age; } } Spring的配置⽂件 <bean id="customer" class="com.baizhiedu.basic.constructer.Customer"> <constructor-arg> <value>suns</value> </constructor-arg> <constructor-arg> <value>102</value> </constructor-arg> </bean>

    构造⽅法重载

    参数个数不同时通过控制<constructor-arg>标签的数量进⾏区分构造参数个数相同时通过在标签引⼊ type属性 进⾏类型的区分<constructor-arg type="">注⼊的总结 未来的实战中,应⽤set注⼊还是构造注⼊? 答案:set注⼊更多 1. 构造注⼊麻烦 (重载) 2. Spring框架底层 ⼤量应⽤了set注⼊

    Processed: 0.011, SQL: 9