Spring中Bean的初始化方式有两种:
1、实现InitializingBean接口
该接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法。
2、利用类反射原理,加载配置文件,使用init-method标签直接注入bean。(@Bean)
package com.example.microservice;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class TestInitializingBean implements InitializingBean {
public TestInitializingBean() {
System.out.println("method: 构造方法");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("method: afterPropertiesSet");
}
@PostConstruct
void postConstruct() {
System.out.println("method: postConstruct");
}
执行结果:
这里就不使用xml配置了,毕竟SpringBoot还是比配置化的好用的
package com.example.microservice;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
//@Component
public class TestInitializingBean implements InitializingBean {
public TestInitializingBean() {
System.out.println("method: 构造方法");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("method: afterPropertiesSet");
}
void init () {
System.out.println("method: init");
}
void destroy() {
System.out.println("method: destroy");
}
@PostConstruct
void postConstruct() {
System.out.println("method: postConstruct");
}
}
执行结果:
总结:
spring bean的初始化执行顺序:构造方法 -> @PostConstruct注解的方法 -> afterPropertiesSet方法 --> init-method指定的方法。
afterPropertiesSet通过接口实现方式调用(效率上高一点),@PostConstruct和init-method都是通过反射机制调用