第1步,getIni()直接返回實例變量this.int
第2步,我們追一下configLocations是從哪裏來的
1步,就是web.xml中配置的,參數名是shiroConfigLocations。
2步,ResourceConfigurable,這個類,從類名就可以看出是支持指定resource的Environment初始化,
3步,會直接調用IniWebEnvironment的init()方法進行初始化。
繼續看下去,我們來看看用戶指定的resource是如何加載的
1步,如果configLocations不是classpath:或url:或file:開頭的,則用ServletContext.getResourceAsStream()方法獲取inputStream流,否則,分別以loadFromClassPath(), loadFromUrl(), loadFromFile()方法來獲取inputStream流。
好,繼續看下去,來看看ini.load()做了什麼。
1步,將inputStram包裝成Scanner,逐行進行處理。
2步,不處理#號開頭的註釋行,不處理;號開頭的行
3步,獲取sectionName,就是[main], [users], [roles],[urls]這樣的名字
4步,addSection方法會將string類型的content轉換成Section對象
Section對象,就是一個擴展的Map,看下圖
好了,我們再回到IniWebEnvironment中的getDefaultIni()方法,沒啥特別的,加載默認的配置文件,
好了,至此,IniWebEnvironment初始化加載shiro的configLocation,講完。