Spring入门——day2
一 . 依赖注入(DI : Dependency Injection)
定义:
依赖:Bean 对象的创建依赖于容器
注入:Bean 对象的资源 均有容器来设置和装配
二 . 注入方式:
1 . 构造器注入(见上节)
2 . Set 注入:
<bean id="address" class="com.ma.pojo.Address"> <property name="address" value="重庆"/> </bean> <bean id="student" class="com.ma.pojo.Student"> <!--第 1种:普通值注入,value--> <property name="name" value="炖红鱼"/> <!--第 2种:Bean 注入,ref--> <property name="address" ref="address"/> <!--第 3种:数组注入,ref--> <property name="books"> <array> <value>红楼梦</value> <value>西游记</value> <value>水浒传</value> </array> </property> <!--第 4种:List--> <property name="hobbies"> <list> <value>看电影</value> <value>玩游戏</value> </list> </property> <!--第 5种:Map, 不用 value,用 entry(注入键值对) --> <property name="card"> <map> <entry key="身份证" value="123456"/> <entry key="银行卡" value="654321"/> </map> </property> <!--第 6种:Set--> <property name="games"> <set> <value>LOL</value> <value>CSGO</value> </set> </property> <!--第 7种:空值注入--> <!--<property name="wife" value=""/>--> <!--第 8种:NUll 值注入--> <property name="wife"> <null/> </property> <!--第 9种:Properties(配置类) 写法类似于 键值对,但是值写在两个尖括号中间--> <property name="info"> <props> <prop key="driver">201806134102</prop> <prop key="url">男</prop> <prop key="username">root</prop> <prop key="password">123456</prop> </props> </property> </bean>
3 . P命名空间:本质上是 Set 注入
<!--P(property)命名空间注入,可以直接注入属性的值-->
<bean id="user" class="com.ma.pojo.User" p:name="炖红鱼" p:age="18"/>
4 . C命名空间:本质上是 构造器注入
<!--C(constructor)命名空间注入,-->
<bean id="user2" class="com.ma.pojo.User" c:age="18" c:name="炖红鱼"/>
PS:使用前需要导入xml约束
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
三 . Bean的 Scope(作用域)
1 . singleton (默认):单例模式,无论用几次 getBean 拿对象,始终用的都是同一个Spring创建好的 实例
2 . prototype:原型模式,每次用 getBean 获取的对象 都是新产生的
其余的类型只能在 web 开发中使用
四 . Bean 的自动装配(autowire)
1. 自动装配是 Spring 满足 Bean 依赖的一种方式
spring中的3种配置方式:
1 . 在 XML 中 显式配置
2 . 在 Java 中 显式配置
3 . 隐式 的自动装配 (重点)
2 . byName 自动装配
3 . byType:
4 . 使用注解实现自动装配
导入约束:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> </beans>
配置注解的支持:
<context:annotation-config/>
在实现类的属性前加上:@Autowired(根据byType来进行自动装配的,如果需要byName的话,加上@Qualifier)
连下面的 set 方法都不需要,只需要 get方法,直接就能够 注入对象(前提是自动装配的属性在IOC(spring)容器中存在,且符合名字 byName)
结果:
5 . @Nullable:若有字段标记了这个注解,说明这个字段可以为 null
6 . @Resource:Java 自己的注解,默认通过 byName实现,如果找不到名字,则通过 byType 实现
@Autowired:Spring 的注解, 默认通过 byType实现,如果找不到,可以通过追加 @Qualifier注解按照 byName ,指定一个唯一的对象实现
五 . Java 复习(集合的分类)
1 . Java 集合不同于数组,可以存放类型和操作数不固定的数据,且只能存放 引用类型 的数据,不能存放 基本数据类型
1 . Set (集,属于 collection)
最简单的一种集合,没有特定方式排序,且没有重复对象,set 接口主要实现两个实现类:
· HashSet():按照哈希算法存取集合中的对象,存取速度较快
· TreeSet():实现 SortedSet 接口,能够对集合中的对象进行排序
set 中存放的是对象的引用,没有重复的
2 . List (列表,属于 collection)
特点:元素以线性方式存储,可以存放重复的对象,实现类包括:
· ArrayList():长度可以改变的数组,可对元素进行随机访问,插入和删除速度慢
· LinkedList(): 采用链表的数据结构,插入和删除速度快,访问慢
3 . Map(映射)
一种把 键 和 值 对象映射的集合,每个元素都包含了一对键和值对象,检索元素时,给出键就会返回值
·get():获取 键 key 相对应的 值,map中键不允许重复
特点:执行效率慢,所以有了HashMap
4 . HashMap:使用了特殊值(散列码:hashcode),来取代对键的缓慢搜索
hashcode:是“相对唯一”的,用于代表对象的 int类型的值,它是通过该对象的某些信息转换生成的
所有Java对象都能产生hashcode
HashMap就是使用对象的 hashcode 进行快速查询的,显著提高了性能
2 . Collection 和 Map的区别:
容器内每个位置存储元素个数不同
Collection 每个位置只有 1个元素
Map 有 Key + Value
3 . 特征:
List、Set、Map 的对象 都是 Object 型
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术