关于Spring IOC (DI-依赖注入),你需要知道的 案例版

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Spring IOC (DI-依赖注入),你需要知道的 案例版相关的知识,希望对你有一定的参考价值。


 


自己做的demo:链接: https://pan.baidu.com/s/1GrNT7tL2E2MrWHOw7-jamA 提取码: jvbk

关于Spring


 


Bean的延长加载


在某些情况下,我们可能希望把bean的创建延迟到使用阶段,以免消耗不必要的内存,Spring也非常自愿地支持了延迟bean的初始化。因此可以在配置文件中定义bean的延迟加载,这样Spring容器将会延迟bean的创建直到真正需要时才创建。通常情况下,从一个已创建的bean引用另外一个bean,或者显示查找一个bean时会触发bean的创建即使配置了延迟属性,因此如果Spring容器在启动时创建了那些设为延长加载的bean实例,不必惊讶,可能那些延迟初始化的bean可能被注入到一个非延迟创建且作用域为singleton的bean。在xml文件中使用bean的lazy-init属性可以配置改bean是否延迟加载,如果需要配置整个xml文件的bean都延迟加载则使用defualt-lazy-init属性,请注意lazy-init属性会覆盖defualt-lazy-init属性。


 


<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​​



" default-lazy-init="true">



<!--default-lazy-init="true" xml中全部bean延迟加载 -->



<!-- lazy-init="false" 表示非延长加载-->



<bean name="accountDao" lazy-init="false"



class="com.zejian.spring.springIoc.dao.impl.AccountDaoImpl"/>







<!-- 声明accountService对象,交给spring创建 -->



<bean name="accountService" class="com.zejian.spring.springIoc.service.impl.AccountServiceImpl">



<!-- 注入accountDao对象,需要set方法-->



<property name="accountDao" ref="accountDao"/>



</bean>



</beans>


请务必明确一点,默认情况下Spring容器在启动阶段就会创建bean,这个过程被称为预先bean初始化,这样是有好处的,可尽可能早发现配置错误,如配置文件的出现错别字或者某些bean还没有被定义却被注入等。当然如存在大量bean需要初始化,这可能引起spring容器启动缓慢,一些特定的bean可能只是某些场合需要而没必要在spring容器启动阶段就创建,这样的bean可能是Mybatis的SessionFactory或者Hibernate SessionFactory等,延迟加载它们会让Spring容器启动更轻松些,从而也减少没必要的内存消耗。


 



关于Spring


 


annotation-config


此属性等同于<context:annotation-config />配置,默认就是true,也就是说,如果配置了context:component-scan其实就没有必要配置annotation-config 了。


 

以上是关于关于Spring IOC (DI-依赖注入),你需要知道的 案例版的主要内容,如果未能解决你的问题,请参考以下文章

Spring 之 控制反转(IoC), 依赖注入(DI)和面向切面(AOP)

Spring基础-IOC与DI(控制反转与依赖注入)

Spring-IOC学习笔记-03DI依赖注入

spring 依赖注入(DI)与控制反转(IOC)

Spring_IOC控制反转和DI依赖注入

spring-第一篇之spring核心机制依赖注入(DI)/控制翻转(IoC)