Spring中lazy-init属性

lazy-init属性:

初始化时期,scope为单例时默认是加载时就实例化,lazy-init可以控制使用时才初始化。

转载于:https://www.cnblogs.com/batj/p/9129159.html

### 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、付费专栏及课程。

余额充值