Spring5学习随笔-Set注入详解和构造注入
1.Spring5学习随笔-Spring5的基本介绍、工厂设计模式2.Spring5学习随笔-Spring5的第一个程序(环境搭建、日志框架整合)
3.Spring5学习随笔-Set注入详解和构造注入
4.Spring5学习随笔-IOC(反转控制)、DI(依赖注入)和创建复杂对象5.Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean6.Spring5学习随笔-AOP系列Spring动态代理7.Spring5学习随笔-AOP底层实现(JDK、CGlib)、实现切面(@Aspect)8.Spring5学习随笔-整合MyBatis(持久层)、连接池、Mapper文件9.Spring5学习随笔-事务属性详解(@Transactional)10.Spring5学习随笔-基础注解编程11.Spring5学习随笔-高级注解(@ComponentScan、@Configuration.....),替换XML配置文件12.Spring5学习随笔-纯注解开发、YML详解学习视频:【孙哥说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>suns@zp.com</value> <value>lincu@zp.com</value> <value>zhangsi@zp.com</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第二种方式
-
第一种赋值方式存在的问题
- 配置文件代码冗余
- 被注入的对象(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" />
第六章、构造注入
- 注入:通过Spring配置文件为成员变量赋值
- Set注入:Spring调用Set方法 通过配置文件为成员变量赋值
- 构造注入:Spring调用构造方法 通过配置文件为成员变量赋值
1.开发步骤
- 提供有参构造方法
- Spring配置文件
<bean id="customer" class="com.baizhi.basic.constructer.Customer"> <constructor-arg value="suns"/> <constructor-arg value="102"/> </bean>
2.构造方法重载
2.1 参数个数不同时
- 通过控制
标签的数量进行区分
2.2构造参数个数相同时
- 通过在标签隐入 type属性 进行类型的区分
3. 注入的总结
-
未来的实战中 ,应用set注入还是构造注入?
答案:set注入更多
- 构造注入麻烦(重载)
- Spring框架底层 大量应用了 set注入
作者:扬眉剑出鞘
出处: https://www.cnblogs.com/eyewink/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现