Spring-@Lazy注解

Spring IoC(ApplicationContext) 容器一般都会在启动的时候实例化所有单实例 bean 。如果我们想要 Spring 在启动的时候延迟加载 bean,即在调用某个 bean 的时候再去初始化,那么就可以使用 @Lazy 注解。

@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Lazy {
	/**
	 * Whether lazy initialization should occur.
	 */
	boolean value() default true;
}

1、TYPE

1.1、当把@Lazy注解写在某个类上(该类上有@Component注解)时,表示该Bean是一个懒加载的Bean,表示该Bean是在用到时才会去创建,而不是Spring启动时创建;

1.2、当把@Lazy注解写在一个@Configuration注解所在类上时,表示该类内部所有@Bean所定义的Bean都是懒加载的Bean。

2、FIELD

当把@Lazy注解加在一个字段上时,Spring会给该属性赋值一个由CGLIB所生成的一个代理对象,当该代理对象执行某个方法时,才会真正的根据字段的类型和名字从Spring容器中去找到某个Bean对象,并执行该Bean对象所对应的方法。

3、METHOD

当把@Lazy注解写在一个@Autowired注解所在方法上时,那么Spring会给该方法的所有入参赋值一个代理对象。

4、PARAMETER

当把@Lazy注解写在一个@Autowired注解所在方法中的某个参数前时,那么Spring会给该入参赋值一个代理对象。

5、CONSTRUCTOR

5.1、当把@Lazy注解写在一个@Autowired注解所在构造方法上时,Spring会给该方法的所有入参赋值一个代理对象;

5.2、注意:可以解决循环依赖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值