Spring 注解开发之 @Bean 及其相关注解

这次介绍一下 Spring 中的几个注解 @Bean 以及 @Scope@Lazy

本文的组织结构如下:

  • 先看一下该注解取代了配置文件中的哪些配置;
  • 再总览这些注解有哪些属性值;
  • 最后讲解一下重要的属性值。

Spring 版本 5.1.2.RELEASE

一、XML 配置

在配置文件中,我们使用 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);
}

上面的配置表示:

  • 设置该 Beanid 值为 person
  • 设置作用域为多实例;
  • 设置为懒加载;

三、重要属性讲解

1、@Bean

默认情况:@Bean 注解对应于 Bean 标签,它作用于方法上,其中 class 值即方法的返回值,id 值即方法名。

@AliasFor("value")
String[] name() default {};

可以使用它的 name 属性或者 value 属性值设置自定义的 id 值。

2、@Scope

他有一个属性 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://一个会话创建一个实例;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕子鸽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值