javascript
java 延迟实例化_延迟初始化Spring Bean的几种方式
XML 配置:
Java 注解:@Lazy(true)
Spring 中默認是非延遲加載Bean的,也就是提前把Bean初始化好,用的時候直接用. 優(yōu)點是運行的時候比較快(提前初始化了,直接用). 缺點是啟動慢和占用內(nèi)存,因為要初始化很多Bean.
延遲加載是需要的時候再去初始化Bean. 優(yōu)點是解約內(nèi)存,啟動快(不需要提前初始化Bean). 缺點是運行的時候比較慢(用的時候先要初始化才能用).
@Lazy開啟Bean延遲加載
DemoApplication.java
package com.rumenz;
public class DemoApplication {
public static void main(String[] args) {
AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext();
ac.register(DemoApplication.class);
ac.refresh();
System.out.println("Spring 上下文啟動完成。。。。。");
//開啟了延遲加載,調(diào)用的時候才會初始化
final DefaultRumenzFactory bean = ac.getBean(DefaultRumenzFactory.class);
ac.close();
}
@Bean(initMethod = "initMethod")
@Lazy //開啟延遲加載
public static DefaultRumenzFactory defaultRumenzFactory(){
return new DefaultRumenzFactory();
}
}
DefaultRumenzFactory.java
package com.rumenz;
public class DefaultRumenzFactory implements InitializingBean {
public DefaultRumenzFactory() {
System.out.println("無參構(gòu)造方法執(zhí)行....");
}
@PostConstruct
public void init(){
System.out.println("PostConstruct init.......");
}
public void initMethod(){
System.out.println("init method.......");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet.....");
}
}
調(diào)用ac.getBean(DefaultRumenzFactory.class) 輸出
Spring 上下文啟動完成。。。。。
xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'defaultRumenzFactory'
無參構(gòu)造方法執(zhí)行....
PostConstruct init.......
afterPropertiesSet.....
init method.......
不調(diào)用ac.getBean(DefaultRumenzFactory.class) 輸出
Spring 上下文啟動完成。。。。。 //沒有調(diào)用,所以沒有執(zhí)行初始化
總結(jié)
以上是生活随笔為你收集整理的java 延迟实例化_延迟初始化Spring Bean的几种方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 撑不住了!谷歌俄罗斯子公司申请破产
- 下一篇: Java Web(五) JSP详解(四大