Sping中bean的延迟加载
【Sping中bean的延迟加载】Srping中的延迟加载使用@Lazy
注解或把
中的lazy-init
属性设置为true
就可以了。
之前只了解这么多,今天使用demo测试了一下,和想象还是有点出路,做下记录。
首先@Lazy
可以注释在类似@Component
组件上,例如:
@Lazy
@Component
public class MyJavaBean{
private String desc;
private String remark;
}
还可以注解在
@Bean
或@Configuration
上- 注解在
@Configuration
上,表示该类下面所有的bean都会延迟加载,如果想要排除其中某一个bean的延迟加载可以使用@Bean(false)
来去除。 - 注解在
@Bean
上表示该bean延迟加载。
@Lazy
@Configuration
public class MyConfig {@Lazy(false)//非延迟加载
@Bean(initMethod = "initMethod", destroyMethod = "destroy1")
public MyJavaBean myJavaBean() {
MyJavaBean myJavaBean = new MyJavaBean();
myJavaBean.setDesc("原始的描述信息");
myJavaBean.setRemark("原始的备注信息");
return myJavaBean;
}@Bean //延迟加载
public HhahaExample hhahaExample() {
return new HhahaExample(myJavaBean());
}
}
请注意,如果一个类(A)使用了延迟加载,而另一个类(B)需要注入A,这时候A的延迟加载是不起作用的,Spring会立马实例化A。那么这种情况下如果使用延迟加载呢,只要在依赖注入点上也加上
@Lazy
就可以了,表示该依赖延迟注入,比如:@Lazy //这里使用上面提到的第一种方法
@Component
public A {
}
public B {
@Lazy
@Autowried
private A a;
}
这时候的A才是延迟加载的。
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募
- 2020-04-07vue中Axios的封装和API接口的管理