Spring Boot注解全攻略(八):@Lazy

702 阅读1分钟

前言

Spring Boot中Bean默认的作用域为单例模式;而Spring IoC容器会在启动的时候实例化所有单例Bean。熟悉单例模式的朋友也许立刻想到了饿汉模式和懒汉模式。在Spring Boot中,@Lazy用于指定Bean是否取消预初始化,该注解可以用于直接或者间接用了@Component注解的类,或使用了@Bean的方法。

PS: Spring使用的是单例注册表实现的单例模式。

源码

@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Lazy {
    boolean value() default true;
}

使用

@Lazy注解使用在@Bean方法上:

@Bean
@Lazy
public MyBean myBean() {
    return new MyBean();
}

也可以在@Comfiguration类上使用,该类中所有的@Bean方法都会延迟初始化

@Configuration
@Lazy
public class MyConfig() {
    @Bean
    public MyBean myBean1() {
        return new MyBean();
    }
    @Bean
    public MyBean myBean2() {
        return new MyBean();
    }
}

在标注了@Lazy@Configuration类内,在某个@Bean方法上标注@Lazy(false),表明这个bean立即初始化。

@Configuration
@Lazy
public class MyConfig() {
    @Bean
    @Lazy(false)
    public MyBean myBean1() {
        return new MyBean();
    }
}