这次介绍一下 Spring
中的几个注解 @Bean
以及 @Scope
和 @Lazy
。
本文的组织结构如下:
Spring 版本 5.1.2.RELEASE
在配置文件中,我们使用 bean
标签将组件放入容器中,使用它的 scope
指定作用范围,lazy-init
指定模式是懒加载;
<bean class="top.wsuo.pojo.Person" id="person" scope="singleton" lazy-init="true">
<property name="name" value="李四"/>
<property name="age" value="18"/>
</bean>
我们使用 id
属性为组件指定 key
值。
懒加载什么意思? 在解释这个之前先来看一下 scope
的作用。
在 xml
配置中,scope
属性有两个候选值,分别为:
singleton
:单实例,默认值;prototype
:多实例。单实例即容器只会初始化对象一次,以后每次获取的对象都是同一个对象;而多实例则相反,每次都不一样。
map.get()
);
所以当我们指定为单实例的时候无论我们用不用,容器在初始化的时候都会创建对象,即使我们不使用,我们可以通过设置懒加载来延缓创建实例的时间。
将 lazy-init="true"
改为 true
即代表开启懒加载,默认是关闭的。
以上讲到的配置,均有对应的注解:
配置文件 | 注解 |
---|---|
bean 标签 | @Bean 注解 |
scope 属性 | @Scope 注解 |
lazy-init 属性 | @Lazy 注解 |
首先放一个例子:
@Lazy
@Scope("prototype")
@Bean("person")
public Person person() {
System.out.println("给容器添加一个对象");
return new Person("张三", 20);
}
上面的配置表示:
Bean
的 id
值为 person
;默认情况:@Bean
注解对应于 Bean
标签,它作用于方法上,其中 class
值即方法的返回值,id
值即方法名。
@AliasFor("value")
String[] name() default {};
可以使用它的 name
属性或者 value
属性值设置自定义的 id
值。
他有一个属性 value
或者叫作 scopeName
可以指定作用域,有下面几种取值:
// 取值的类型
ConfigurableBeanFactory # SCOPE_PROTOTYPE
ConfigurableBeanFactory # SCOPE_SINGLETON
org.springframework.web.context.WebApplicationContext # SCOPE_REQUEST
org.springframework.web.context.WebApplicationContext # SCOPE_SESSION
// 具体的值
singleton://单实例;
prototype://多实例;
request://一个请求创建一个实例;
session://一个会话创建一个实例;
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有