DruidDataSource Filter使用
SPI过滤器初始化
init
方法进行SPI
的过滤器加载,通过阅读ServiceLoader
方法的API
,了解到需要在resources/META-INF/services/
,下创建名字为接口的全路径名称文件,内容为:实现类的全路径。
发现文件中并没有com.alibaba.druid.filter.Filter
,也就是这个方法根本不会加载。
private void initFromSPIServiceLoader() {
//跳过加载SPI过滤器
if (loadSpifilterSkip) {
return;
}
if (autoFilters == null) {
List<Filter> filters = new ArrayList<Filter>();
//加载SPI过滤器,com.alibaba.druid.filter.Filter
ServiceLoader<Filter> autoFilterLoader = ServiceLoader.load(Filter.class);
for (Filter filter : autoFilterLoader) {
//是否自动加载
AutoLoad autoLoad = filter.getClass().getAnnotation(AutoLoad.class);
//将过滤器放入filters