1.springboot 启动顺序 构造器 > @Component ( @Autowired > @PostConstruct )
2.构造器是spring 初始化的时候,直接运行
3.使用BeanPostProcessor 可以在构造器初始化前,运行Component对象
4.静态方法的使用,系统会为静态方法分配一个固定的内存空间。而普通方法,会随着对象的调用而加载,当使用完毕,会自动释放掉空间。
5.获取yml配置文件参数,注入到静态变量中,使用@Component 注解作用该配置类,并且implements BeanPostProcessor 接口
代码如下:
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
@Order(1)
public class WsUrlVo implements BeanPostProcessor {
public static String base_url_static;
@Value("${ws.base_url}")
public String base_url;
@PostConstruct
public void setBase_url(){
base_url_static =this.base_url;
}
@Bean
public static String getBase_url(){
return base_url_static;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
//bean初始化之前,要干点什么或者什么都不干,但是干不干都要把人家给返回回去,不能一进来就出不去了~
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
//bean已经初始化完了,这时候你想干点什么或者什么都不干,和上面一样,都要给人家返回回去
return bean;
}
// private static String base_url;
// @Value("${ws.base_url}")
// public void setBase_url(String base_url){
// this.base_url = base_url;
// }
// public static String getBase_url(){
// return Base_url;
// }
//
}
本文探讨了SpringBoot启动顺序,强调构造器在@Component注解的@Autowired和@PostConstruct之前执行。同时,通过示例展示了如何利用BeanPostProcessor在构造器初始化之前操作Component对象。代码中创建了一个WsUrlVo类,它实现了BeanPostProcessor接口,以在bean初始化前后进行处理。静态变量base_url_static被注入了从yml配置文件中读取的参数,并通过@Component注解和@Bean方法提供访问。
796

被折叠的 条评论
为什么被折叠?



