底层原理
1.Spring提供ioc容器实现两种方式:(两个接口)
- BeanFactory
- ApplicationContext(BeanFactory的子接口,优)
2.ApplicationContext主要实现类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WvTGQxgu-1647923455967)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20220314101129959.png)]
Bean管理xml方式
Ioc操作bean管理
什么是bean管理?
- 创建对象
- 注入属性
bean管理操作两种方式
基于xml配置文件实现
-
基于xml创建对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eMvvkxRt-1647923455968)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20220314102522869.png)]
id属性:给这个对象起别名,用在对它的寻找
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HtAi3PX4-1647923455969)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20220314104755876.png)]
class属性:类的全路径
name属性:与id相似,但name可以加特殊符号
-
基于xml方式注入属性
DI:依赖注入,注入属性
-
set注入 bean标签里边使用property完成属性注入
<property name="实现类的属性名称" value="向属性里注入的值"></property>
-
有参构造注入
bean标签里使用标签
index属性:索引值
p名称空间注入
- 添加p名称空间的一个约束,然后在bean标签里添加p:属性
字面量
-
空值 在property中不写value属性 但在property中加一个标签
-
特殊符号 两种解决方式:1.转义 2.把特殊符号内容写到CDATA中
-
<!-- 配置User类的对象创建--> <bean id="user" class="com.yangpeng.spring5.User"> <property name="addres"> <value> <![CDATA[具体内容]]> </value> </property> </bean>
外部bean的注入 级联赋值 :第一种 使用ref 第二种不常用的 其中要在实现类的该属性中使用get方法获得该属性值
property标签,name属性:类里面的属性名称
<property name="类里面属性名称" ref="与要引用的对象的id要对应"><property> 如 <bean id="ref与该处一致"></bean>
内部bean :在一个bean里边再嵌套另一个对象,同样适用于引用数据类型
<bean id=" "class=""> <property name="dept"> <bean> <property name=""></property> </bean> </property> </bean>
-
-
xml注入集合属性
1、注入数组类型属性
<bean>
<property name="arr">
<array>
<value></value>
<value></value>
</array>
</property>
</bean>
2、注入List集合类型属性
<bean>
<property name="list">
<list>
<value></value>
<value></value>
</list>
</property>
</bean>
3、注入Map集合类型属性
<bean>
<property name="maps">
<map>
<entry key=""value=""></entry>
<entry key=""value=""></entry>
</map>
</property>
</bean>
Set类型属性注入
<bean>
<property name="set">
<set>
<value></value>
<value></value>
</set>
</property>
</bean>
对象型注入
<bean>
<property>
<list>
<ref bean="course1"></ref>
</list>
</property>
</bean>
<bean id="course1" class=""></bean>
把集合注入部分抽取出来
<util:list id="bookList">
<value></value>
<value></value>
<value></value>
</util:list>
提取list集合类型属性注入
<bean id="book" class="">
<property name=""ref="bookList"></property>
</bean>
FactoryBean:定义类型和返回类型可以不一样
singleton与prototype区别:
1.Spring默认为单实例 通过bean标签里的scope属性可是设置实例,prototype多实例 singleton 单实例
2.设置scope的值为singleton的时候,加载spring配置文件就会创建单实例对象,设置为prototype时,不是再加载spring配置文件时创建对象,在创建getbean方法时创建多实例对象
bean的生命周期 7步
注意:后置处理器
xml自动装配
标签里的属性autowire,配置自动装配
autowire属性常用两个值:byName,byType
byName方式特点:注入值bean的id值和类里边属性的名称要一样
引入外部属性文件 如jdbc用 properties引用
注解方式注入
Spring 针对Bean管理中创建对象提供注解
@Component
@Service
@Controller
@Repository
上面四个注解的功能都是一样的 都可以用来创建bean实例