Springboot @Lazy注解

作者:小猿聊编程
更多资料:https://www.techlearn.cn/

作用:@Lazy可以实现bean的延迟初始化,在spring容器启动时不初始化Bean,直到用到这个Bean的时候才去初始化.

使用范围:任意类型、方法、构造器、参数、字段。

参数:value -> boolean类型,用来配置是否应发生延迟初始化,默认是true

定义:

@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR,
ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Lazy {
    boolean value() default true;
}
1、搭配@Component使用
@Component
@Lazy //@1
public class Service1 {
    public Service1(){
        System.out.println("create service1");
    }
}

@1: 使用到了@Lazy,默认值为true,表示会被延迟初始化,在容器启动过程中中会被初始化,当从容器中查找这个bean的时候才会初始化。

2、搭配@Configuration类中使用

@Lazy和@Configuration一起使用,此时配置类中所有通过@Bean方式注册的bean都会被延迟初始化,不过也可以在@Bean标注的方法上使用@Lazy来覆盖配置类上的@Lazy配置,看下面代码:

@Configuration
@Lazy //@1
public class ServiceConfig {

    @Bean
    public Service1 service1(){
      return new Service1();
    }

    @Bean
    @Lazy(value = false)  //@2
    public Service2 service2(){
        return new Service2();
    }
}

@1: 在配置类上使用了@Lazy,此时会对当前类中所有的@Bean标注的方法生效

@2: 这个方法上使用了@Lazy(value = false),则表明此时service2不会被延迟初始化,其它的bean仍然会延迟初始化。

3、搭配@ComponentScan类中使用
@ComponentScan(value = "XXX.XXX", lazyInit = true)
@Configuration
public class ServiceConfig {
    
}
@Lazy失效示例

非延迟加载的Controller

@Controller
public class TestController implements InitializingBean{
    @Autowired
    private TestService testService;
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("testController Initializing");
    }
}

延迟加载的Service

@Lazy
@Service
public class TestService implements InitializingBean {
  
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("testService Initializing");
    }
  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值