(一)IOC配置文件注意点
【1】别名操作
通过alias标签指定bean的别名
<alias name="要起别名的bean的id" alias="要指定的别名"/>
【2】单例与多例模式,bean的生命周期
单例模式生命周期:bean在单例模式下,spring容器启动时解析xml发现该bean标签后,直接创建该bean的对象存入内部map中保存,此后无论调用多少次getBean()获取该bean都是从map中获取该对象返回,一直是一个对象。此对象一直被Spring容器持有,直到容器退出时,随着容器的退出对象被销毁。
多例模式生命周期:bean在多例模式下,spring容器启动时解析xml发现该bean标签后,只是将该bean进行管理,并不会创建对象,此后每次使用 getBean()获取该bean时,spring都会重新创建该对象返回,每次都是一个新的对象。这个对象spring容器并不会持有,什么销毁取决于使用该对象的用户自己什么时候销毁该对象。
【3】懒加载机制
懒加载机制就是可以规定指定的bean不在启动时立即创建,而是延后到第一次用时才创建,从而减轻在启动过程中对时间和内存的消耗。
懒加载机制只对单例bean有作用,对于多例bean设置懒加载没有意义。
懒加载局部配置:true为使用懒加载,false为不使用懒加载
<bean id="cart" class="cn.ccc.beans.Cart" lazy-init="true"></bean>
懒加载全局配置:在beans标签中配置
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"
default-lazy-init="true"></beans>
补充:如果同时设定全局和指定bean的懒加载机制,且配置不相同,则对于该bean局部配置覆盖全局配置。
【4】静态工厂类的配置,工厂类的配置,以及实现FactoryBean接口类的配置
实例工厂类的配置
<bean id="personFactory" class="cn.ccc.factory.PersonInstanceFactory"></bean>
<bean id="person" factory-bean="personFactory" factory-method="getInstance"></bean>
静态工厂类的配置
<bean id="person" class="cn.ccc.factory.PersonStaticFactory" factory-method="getInstance">
getInstance方法必须为static修饰
实现FactoryBean接口类的配置
<bean id="person" class="cn.ccc.factory.PersonSpringFactory"></bean>
(2)DI配置文件注意点
【1】Properties对象配置
<property name="prop">
<props>
<prop key="k1">v1</prop>
<prop key="k2">v2</prop>
<prop key="k3">v3</prop>
<prop key="k4">v4</prop>
</props>
</property>
【2】Map映射的配置
<property name="map">
<map>
<entry key="addr" value="王者荣耀"></entry>
<entry key="addr" value="英雄联盟"></entry>
<entry key="skill" value="风火轮"></entry>
<entry key="age" value="19"></entry>
</map>
</property>
【3】自动装配
在Spring的setXxx方式实现的注入过程中,支持自动装配机制,所谓自动装配机制,会根据要设置的javabean属性的名字 或 类型 到spring中自动寻找对应id 或 类型的<bean>进行设置,从而省去依次配置的过程,简化了配置。
byName:根据javabean中需要注入的属性的名字 ,在spring容器中找对应id的<bean>将该<bean>的对象复制给 当前的属性
byType:根据javabean中需要注入的属性的类型,在spring容器中找对应class类型的<bean>将该<bean>的对象复制给当前的属性
局部配置
<bean id="teacher" class="cn.ccc.beans.Teacher" autowire="byName"></bean>
全局配置,在beans中配置
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"
default-autowire="byName"></beans>
补充:byType方式 根据类型进行匹配,可能匹配到多个<bean>,此时会抛出异常。而byName是通过id来寻找<bean>,id没有重复,不会有这方面的问题,所以推荐使用byName方式。
使用自动转配前提是有setXxx方法,才能进行自动装配。
详细重点请参考
IOC:https://blog.csdn.net/c17315377559/article/details/94284210
DI:https://blog.csdn.net/c17315377559/article/details/94318276