Spring中的Lazy-Init

本文详细介绍了Spring框架中Lazy初始化的概念及其应用场景。解释了如何通过配置实现Bean的延迟加载,以减少开发模式下启动时间,并探讨了Lazy-init属性对不同作用域Bean的影响。

<!--看到知识还是要记下来,不然很快就忘了-->

Spring在启动的时候会加载一些对象实例(由ApplicationContext实现),像初始化Action、Service、Dao、数据库连接、事务等,也会对所有singleton bean 进行实例化;

这样可以减轻web服务器运行时的负担,但开发模式下并不适合,所以我们可以在对应Bean使用Lazy-init = true或@Lazy(value=“true”)设置延长启动(后面会在第一次请求时通过GetBean获得实例)。

在容器层次我们可以使用<beans default-lazy-init="true"/>来启动延长加载;

Lazy-init设置只对scope为singleton的bean起作用,当bean的scope=“pototype”是即使设置Lazy-init=“false”也是不会起作用的(不会随Spring容器启动而实例化);

另外这当中有两个参数需要说明:

  (1).init-method指定初始化Bean时执行的方法;

(2).destory-method指定Bean销毁是执行的方法;

### Spring框架中Bean作用域(Scope)的默认值 在Spring框架中,Bean的作用域(Scope)用于定义 Bean 的生命周期及其可见范围。若未显式指定 `@Scope` 注解或 XML 配置中的 `scope` 属性,则 Spring 会使用 `"singleton"` 作为默认作用域[^2]。 这意味着,在大多数情况下,Spring 容器将只为该 Bean 创建一个共享的实例,并在整个应用上下文中提供对该实例的引用。此行为适用于通过注解(如 `@Component`、`@Service`)或 XML 配置定义的 Bean,只要未明确设置其他作用域,都会以单例模式进行管理[^1]。 例如,以下 Java 注解配置中并未指定 `@Scope`: ```java @Component public class MyService { // 默认作用域为 singleton } ``` 在此示例中,`MyService` 将被 Spring 容器作为单例 Bean 管理,所有对该 Bean 的请求都将返回相同的实例[^2]。 同样地,在 XML 配置文件中省略 `scope` 属性时,默认也为 `singleton`: ```xml <bean id="myBean" class="com.example.MyBean"/> <!-- 等价于 scope="singleton" --> ``` 这种设计适用于无状态组件或需要全局共享的状态对象,是 Spring 中最常用的作用域之一[^4]。 --- ### 单例作用域的特点 - **唯一实例**:每个 Spring 应用上下文中仅存在一个该 Bean 的实例。 - **容器管理生命周期**:Bean 的创建和销毁由 Spring 容器控制,通常与上下文的启动和关闭同步。 - **资源共享**:适合存储全局状态或共享资源,如数据库连接池、缓存服务等。 --- ### 其他常见作用域简介 虽然 `singleton` 是默认作用域,Spring 还支持多种其他作用域,包括: - `prototype`:每次请求都会创建一个新的实例。 - `request`:每个 HTTP 请求拥有独立的 Bean 实例(仅限 Web 应用)。 - `session`:每个 HTTP Session 拥有一个独立的 Bean 实例(仅限 Web 应用)。 - `application`:每个 ServletContext 生命周期内只有一个实例(仅限 Web 应用)。 - `websocket`:每个 WebSocket 会话周期内只有一个实例(仅限 WebSocket 应用)。 这些作用域可以通过 `@Scope("prototype")` 或在 XML 配置中指定 `scope` 属性来启用[^3]。 --- ### 自定义作用域的注册方式 Spring 提供了扩展机制,允许开发者自定义作用域并通过 `ConfigurableBeanFactory#registerScope` 方法将其注册到容器中。例如: ```java ConfigurableBeanFactory beanFactory = ...; beanFactory.registerScope("customScope", new CustomScope()); ``` 该方法可用于实现特定业务场景下的作用域管理,如线程级作用域、任务作用域等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值