1首先先說一下問題;組件的配置文件,幾個對應的url;
/aaa/
127.0.0.1:22/img/
img/
為sftp上傳文件的路徑地址;
解決問題的思路是 在用戶登錄的時候合唱配置文件解析失敗,根據用戶的id屬性建立用戶自己對應的文件夾目錄,這樣就可以把用戶的圖片分離開了;用戶每次找的時候進入的是自己對應id的文件夾下的圖片;
思路是這樣但是問題如下;
1路徑是配置文件配置好的,所以目前解決問題的方法是動態指定地址;
首先想到問題的解決思路就是通過mxl 解析通過設置屬性參數從新寫回xml數據;但是看了項目目前的配置 的配置類是在項目啟動的時候就加載的,于是看網上博文有沒有解決方法,還確實有一個博文有思路,
思路如下;
在用戶登錄的時候 加載.xml 配置文件 解析文件并寫回文件, 然后就完了。。。。也是很無奈。只能自己想辦法。
然后去官網 看到了java修改配置的方法;
自己寫一個配置類繼承;
復寫其中的方法;我首先復寫了init 方法,但是因為啟動的時候沒有用戶信息,只執行一次 ,方案失敗 ---總結失敗原因對init方法理解不是很透徹;
然后又看到了一個方法;
,復寫此方法可以創建對象;
可以在此過程中 讀取.xml配置文件信息合唱配置文件解析失敗,動態修改生成所需要的的對象,最后發現并沒有成功,系統在啟動的時候已經加載的配置文件 源碼中的 ; 為私有屬性,已經與xml中的屬性配對,此時在修改已經沒有作用;那有沒有什么方法可以方位父對象的私有屬性,此時的我想到了反射;
于是修改代碼如下;
@
() {
= () .();//用戶信息
if ( == null) {
new (this.);
}
try {
Class clazz=this.().();
Field field=clazz.("");
field.(true);
= field.get(this);//文件路徑
field.set(this,.+.getId()+""+"/");//設置用戶相關的id文件夾路徑
.out.(.+.getId()+""+"/");
//檢測用戶是否第一次登陸,第一次登陸創建服務器文件夾;
= .();
= .(.+.getId()+""+"/", );
if(!){
.(.+.getId()+""+"/", );
}
} catch ( e) {
throw new (e);
}
a =new (this.);
a;
};
問題的最終解決;
總結解決的過程和去掉不必要走的彎路;
1明確解決什么問題;
2初步設置解決問題的方案;
3熟悉插件在項目中的配置;
4熟悉插件的加載機制和配置方法;有必要的話debug源碼了解其流程
5在配置方法和加載過程中插入自己所需要的邏輯;
6知識的運用 比如反射 xml解析等相關知識;