【Spring 工厂】注入详解 — Set注入(JDK内置类型,用户自定义类型)、构造注入(重载

什么是注入?


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

为什么要注入?

  • 通过编码的方式,为成员变量进行赋值,存在耦合。

  • 注入的好处:解耦合

public void test4() {

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(“/applicationContext.xml”);

Person person = (Person) ctx.getBean(“person”);

// 通过代码为变量赋值, 存在耦合, 如果我们以后想修改变量的值, 需要修改代码, 重新编译

person.setId(1);

person.setName(“zhenyu”);

System.out.println(person);

}

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

  • 类的成员变量提供 set get 方法

  • 配置 spring 的配置文件

10

yusael

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


Spring 底层通过调用对象属性对应的 set 方法,完成成员变量的赋值,这种方式也称为 Set注入

在这里插入图片描述

Set注入详解

==========================================================================

Set注入的变量类型:

  • JDK内置类型

8种基本类型 + String、数组类型、set集合、list集合、Map集合、Properties集合。

  • 用户自定义类型

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

xxxxx

在这里插入图片描述

JDK内置类型


String+8种基本类型

10

yusael

数组

abc@qq.com

123@qq.com

hello@qq.com

Set集合

138xxxxxxxxxx

139xxxxxxxxxx

138xxxxxxxxxx

List集合

China

Earth

hell

Map集合

hello

12312312312

world

21314214214

Properites

value1

value2

value3

复杂JDK类型(Date、…)

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

用户自定义类型


第一种方式

[开发步骤]:

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

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

第二种方式

第⼀种赋值方式存在的问题:

  1. 配置文件代码冗余;

  2. 被注入的对象 (UserDAO)多次创建,浪费(JVM)内存资源。

[开发步骤]:

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

  • 配置文件中进行配置;

Spring4.x 废除了 <ref local=""/> 基本等效 <ref bean=""/>

Set注入的简化


基于属性的简化

JDK 类型注入:

10

JDK类型注入简化:value 属性只能简化 8种基本类型 + String 注入标签;


用户自定义类型注入:

用户自定义类型注入简化:

基于p命名空间的简化

JDK 类型注入:

10

yusael

JDK 类型注入 - 基于p命名空间的简化。

<bean id=“person” name=“p” class=“com.yusael.basic.Person”

p:name=“yusael” p:id=“10”/>


用户自定义类型注入:

用户自定义类型注入 - 基于p命名空间的简化。

<bean id=“userService” class=“com.yusael.service.UserServiceImpl”

p:userDAO-ref=“userDAO”/>

构造注入

=======================================================================

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

学习视频:

大厂面试真题:

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
图片转存中…(img-xcm9Jwm4-1713541068843)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

学习视频:

[外链图片转存中…(img-Ule6XzUM-1713541068845)]

大厂面试真题:

[外链图片转存中…(img-89VEYxM2-1713541068847)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值