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的基础上进行扩展和集成出来的。基础在,熟练只是的时间而已。
PS:
在这个里面有个点说错了,看您是否能找的出来,欢迎您在评论区留言。