首页 > 其他分享 >Spring5学习随笔-Set注入详解和构造注入

Spring5学习随笔-Set注入详解和构造注入

时间:2023-11-15 12:13:36浏览次数:37  
标签:Set 配置文件 Spring set 类型 注入 Spring5

学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】

第四章、注入(Injection)

1.什么是注入

通过Spring工厂及配置文件,为所创建对象的成员变量赋值

1.1为什么需要注入

“通过编码的方式,为成员遍历进行赋值,存在耦合”

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

  • 类为成员变量提供set方法
  • 配置Spring的配置文件
<bean id="person" name="p,p1" class="com.baizhi.basic.Person">
    <property name="id">
        <value>10</value>
    </property>
    <property name="name">
        <value>xiaojr</value>
    </property>
</bean>

1.3注入好处

1.解耦合

2.Spring注入的原理分析(简易版)

第五章、Set注入详解

针对于不同类型的成员变量,在<property>标签,需要嵌套其他标签

1.JDK内置类型

1.1 String+8种基本类型

<value>suns</value>

1.2 数组

<list>
    <value>[email protected]</value>
    <value>[email protected]</value>
    <value>[email protected]</value>
</list>

1.3 Set集合

<set>
    <value>1239188123</value>
    <value>123813121</value>
    <value>130111111</value>
    <value>130111111</value>
</set>

<set>
	<ref bean=""/> // 什么都能存
	<set></set>
</set>

1.4 List集合

<list>
    <value>zpark</value>
    <value>shangdi</value>
    <value>xierq</value>
</list>
<list>
	<ref bean=""/>
	<set></set>
</list>

1.5 Map集合

注意: map -- entry -- key有特定的标签 <key></key>
			值根据对应类型选择对应类型的标签
<map>
    <entry>
        <key><value>suns</value></key>
        <value>4231324113</value>
    </entry>
    <entry>
        <key><value>chenvn</value></key>
        <ref bean=""/>
    </entry>
</map>

1.6 Properites

Properties类型 特殊的Map key=String value=String

<props>
    <prop key="key1">value1</prop>
    <prop key="key2">value2</prop>
</props>

1.7 复杂的JDK类型(Date)

需要程序员自定义类型转换器,处理。

2.用户自定义类型

2.1 第一种方式

  • 为成员变量提供set get方法

  • 配置文件中进行注入(赋值)

    <bean id="userService" class="com.baizhi.basic.UserServiceImpl">
        <property name="userDao" >
            <bean class="com.baizhi.basic.UserDaoImpl"></bean>
        </property>
    </bean>
    

2.2第二种方式

  • 第一种赋值方式存在的问题

    1. 配置文件代码冗余
    2. 被注入的对象(UserDao)多次创建,浪费(JVM)内容资源
  • 为成员变量提供set get方法

  • 配置文件中进行配置

    <!-- 第二种 赋值方式  先创建需要的dao对象-->
        <bean id="userDAO" class="com.baizhi.basic.UserDaoImpl"/>
        <bean id="userService" class="com.baizhi.basic.UserServiceImpl">
            <property name="userDao">
                <ref bean="userDAO"/>
            </property>
        </bean>
    #Spring4.x废除了<ref local=""/>,基本等效 <ref bean=""/>
    

3.Set注入的简化写法

3.1基于属性简化

JDK类型简化
<property name="name" value="suns"/>
注意:value属性 只能简化8种基本类型 + String注入标签

用户自定义类型
<property name="userDao" ref="userDao"/>

3.2 基于p命名空间简化

<!-- p: 简化写法-->
	<bean id="person" class="xxx.Person" p:name="suns" p:id="100"/>

用户自定义类型
<bean id="userDAO" class="xxx.UserDaoImpl"/>
<bean id="userService" class="xxx.UserServiceImpl" p:userDao-ref="userDAO" />

第六章、构造注入

  1. 注入:通过Spring配置文件为成员变量赋值
  2. Set注入:Spring调用Set方法 通过配置文件为成员变量赋值
  3. 构造注入:Spring调用构造方法 通过配置文件为成员变量赋值

1.开发步骤

  • 提供有参构造方法
  • Spring配置文件
<bean id="customer" class="com.baizhi.basic.constructer.Customer">
    <constructor-arg  value="suns"/>
    <constructor-arg  value="102"/>
</bean>

2.构造方法重载

2.1 参数个数不同时

  1. 通过控制标签的数量进行区分

2.2构造参数个数相同时

  1. 通过在标签隐入 type属性 进行类型的区分

3. 注入的总结

  1. 未来的实战中 ,应用set注入还是构造注入?

    答案:set注入更多

    1. 构造注入麻烦(重载)
    2. Spring框架底层 大量应用了 set注入

标签:Set,配置文件,Spring,set,类型,注入,Spring5
From: https://www.cnblogs.com/eyewink/p/17833532.html

相关文章

  • jmeter-set up先登录获取token,再测试
    1.顶部加通用的信息头管理,cookie管理器 2.添加setup线程组,用户数为13.添加登录请求4.添加断言,添加debug调试 5.提取json,  6.添加debug,运行后查看是否获取到token 7.设置token为全局变量 8.再添加线程组,线程组可正常设置并发数需要用到token的地方再添加......
  • ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
    1、错误场景和现象Linux开启或重启防火墙后,使用默认驱动程序创建网络“docker-compose_default”报错如下:Creatingnetwork"docker-compose_default"withthedefaultdriverERROR:FailedtoSetupIPtables:UnabletoenableSKIPDNATrule:(iptablesfailed:iptab......
  • 「模拟赛」Solution Set
    \(\text{heart}\)\(\text{Solution}\)可以记\(f(u)\)为从\(u\)出发到某个点停止的方案数,\(f(u)\)可以\(O(n)\)转移,显然复杂度为\(O(n^2)\).当前我们要转移\(u\)子树内,对于\(v\in\text{subtree(u)}\)我们记\(g_v\)为\(\min\limits_{p_k>p_j}p_k\),其中\(k\)在......
  • Pset_AnnotationContourLine
    Pset_AnnotationContourLinePSET_TYPEDRIVENOVERRIDE / IfcAnnotation / ContourLine注释等高线:指定具有单个一致测量值的标准曲线的参数。: Définitiondel'IAI:paramètresspécifiquesàunecourbestandardquiaunevaleursimpleetcohérente.......
  • hci0 command 0xfc20 tx timeout(Realtek 8761B Chipset, Bluetooth 5.0)
    当前使用的Linux内核版本: 4.4.189插上USBBluetooth5.0Adapter后,dmesg显示如下log:[240.348480]usb3-1.2:newfull-speedUSBdevicenumber6usingehci-platform[240.437834]usb3-1.2:NewUSBdevicefound,idVendor=0bda,idProduct=8771[240.438541]us......
  • 浅谈JVM Instruction Set (Opcode)
    浅谈JVMInstructionSet(Opcode)1.背景日常开发中,遇到一个潜藏bug的java代码,借此简单回顾一下JVMInstructionSet(Opcode)知识。问题demo代码如下:publicclassBugDemo{publicstaticvoidmain(String[]args){//模拟用户输入(具有不可预测性),假设......
  • 聊聊定时器 setTimeout 的时延问题
    全局的 setTimeout()  方法设置一个定时器,一旦定时器到期,就会执行一个函数或指定的代码片段,但是需要注意的是,setTimeout 并不是 ECMAScript 标准的一部分,不过几乎每一个JS运行时都支持了这个函数。定时器的使用比较简单,这里不再阐述,我们这篇文章主要聊下关于setTimeout有......
  • Spring5学习随笔-Spring5的第一个程序(环境搭建、日志框架整合)
    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】第二章、第一个Spring程序1.软件版本1.JDK1.8+2.Maven3.5+3.IDEA2018+4.SpringFramework5.1.4官网:www.spring.io2.环境搭建Spring的jar包......
  • .NET之默认依赖注入 注入方式(构造函数注入、FromServices操作注入)和 获取服务(Contr
    .NET之默认依赖注入注入方式(构造函数注入、FromServices操作注入)和获取服务(Controller构造函数中注入获取、IServiceProvider获取、statrup中获取服务)介绍领券https://www.cps3.cn/不要依赖于具体的实现,应该依赖于抽象,高层模块不应该依赖于底层模块,二者应该依赖于抽......
  • 使用 npm config set script-shell 实现跨平台的脚本执行需求
    npmconfigsetscript-shellC:\\app\\Git20180223\\bin\\bash.exe这个命令的准确含义是设置npm的脚本(shell)执行环境为"C:\app\Git20180223\bin\bash.exe"。这个命令用于修改npm的配置,具体来说,它修改了npm的一个配置项,该配置项用于指定在执行npm脚本时使用的shell程序。在这个......