SpringBoot的出现,极大的简化了Java开发的相关配置工作。让人可以更加专注的在业务上。

我们经常会在bootstrap.yml文件中进行相关的开发配置。这样的配置一多,后续进行修改的时候发现比较麻烦。

特别是一些像调用到第三方的appId的这些,如果换个环境就要重新发布一次,感觉还是有点麻烦。

那么能不能把这些配置项写进数据库中呢?

放心吧,这些问题,Spring早就帮您想到了。

其实很简单,看SpringBoot的官方技术文档,上面写的很详细了。

开个玩笑,那个文档确实有点多。

这个按照Bean的初始化执行顺序,按照对应的执行顺序去进行就OK了。

Bean初始化的执行顺序: Constructor -> @Autowired -> @PostConstruct -> 静态方法

按照这个思路去实现的时候,就可以了。

即在现有的类方法上增加@PostConstruct注解。这个注解的目的:被注解的方法,在对象加载完依赖注入后执行

按照这个思路,执行我们的三板斧计划:

1、引入对应的连接数据库操作的service,加上@Autowired注解。
2、在static之前的方法,加上@PostConstruct注解。

3、跑test方法,验证是否正确。

等等,好像有点问题,在static静态方法中,引用非静态方法报错了。这个是不能这样操作的。

怎么办?最简单的方法:把所有的非静态方法转换成static方法。

好像还是有问题,@Autowired注解的service不支持。

怎么处理呢?其实很简单,增加一个init的方法。

@PostConstruct注解放到init方法上就解决了。init方法做什么用的,自行百度下,这里不作过多的解释。

直接新三板斧:

1、设置一个service的静态变量。

@Autowired
  private   SystemService systemService1;

  private static SystemService systemService;

2、在init方法中将@Autowired注解的同名service赋值给静态变量。

@PostConstruct
 public void init(){
    systemService = systemService1;
 }

3、将static中调用的非静态变量调整为静态变量即可。

private static Object getData(String key) {
    
    systemService.getValue(key)

 }

总结一下:

这主要是看对 @PostConstruct的理解程度和执行顺序。如果对servlet的生命周期有比较清楚的认知。那么这个理解和处理起来,会很快的。毕竟所有的java第三方框架都是基于Java的基础上进行扩展和集成出来的。基础在,熟练只是的时间而已。