关于Spring IOC (DI-依赖注入),你需要知道的 案例版
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Spring IOC (DI-依赖注入),你需要知道的 案例版相关的知识,希望对你有一定的参考价值。
自己做的demo:链接: https://pan.baidu.com/s/1GrNT7tL2E2MrWHOw7-jamA 提取码: jvbk
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容器启动更轻松些,从而也减少没必要的内存消耗。
annotation-config
此属性等同于<context:annotation-config />配置,默认就是true,也就是说,如果配置了context:component-scan其实就没有必要配置annotation-config 了。
以上是关于关于Spring IOC (DI-依赖注入),你需要知道的 案例版的主要内容,如果未能解决你的问题,请参考以下文章