java 延迟初始化_延迟初始化Spring Bean的几种方式

XML 配置:

Java 注解:@Lazy(true)

Spring 中默认是非延迟加载Bean的,也就是提前把Bean初始化好,用的时候直接用. 优点是运行的时候比较快(提前初始化了,直接用). 缺点是启动慢和占用内存,因为要初始化很多Bean.

延迟加载是需要的时候再去初始化Bean. 优点是解约内存,启动快(不需要提前初始化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 上下文启动完成。。。。。");

//开启了延迟加载,调用的时候才会初始化

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("无参构造方法执行....");

}

@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.....");

}

}

调用ac.getBean(DefaultRumenzFactory.class) 输出

Spring 上下文启动完成。。。。。

xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'defaultRumenzFactory'

无参构造方法执行....

PostConstruct init.......

afterPropertiesSet.....

init method.......

不调用ac.getBean(DefaultRumenzFactory.class) 输出

Spring 上下文启动完成。。。。。 //没有调用,所以没有执行初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值