spring的加载类的注入或者改写,有几种不同的方式。
1、直接实现某些接口,获取对象,进而加入到spring某些队列的正常序列中,或者修改其执行方式,最典型的就是初始化BeanPostProcessor和InstantiationAwareBeanPostProcessorAdapter
具体操作这里不详述,需要的时候可以自行百度。
2、添加到spring的factoriesLoader中,利用其load规则进行注入
/resources/META-INF/spring.factories
这个文件里面描述的文件会作为springboot context最初加载的类工厂进行加载,所以,如果想覆盖或者改写某些加载类的,可以在你自己的jar或者项目中,增加此路径下的配置,覆盖对应类的接口实现即可。
例如
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.test.TestEnableAutoCongiuration
这种改写的目的,更多的在于某些spring的类的功能不满足你的诉求,你希望基于某些接口或者类改写为自己的实现时,这样的处理方式是非常便利的。
3、java的Instrument接口。
这是一个比较粗暴的做法,但是非常有效,一般在进行底层记录、过滤等其他操作时,可以考虑这种方式,直接在class进入jvm之前对其进行二进制内容修改。
网友评论