Java高階知識(學習筆記)
1.properties:屬性配置檔案工具
properties props = new properties();
//載入xx.properties屬性配置檔案
prop.load(Test.class.getClassLoader().getResourceAsStream("xx.properties"));
//取配置引數
String value = props.getProperty("key");
2.動態代理
根據一個或者多個介面,用jdk的proxy框架構造出一個動態代理類的物件
那麼這個動態代理物件上就具備哪些介面上的方法
只不過這些方法的具體邏輯是定義在InvocationHandler實現類的invoke()方法中
Object o = proxy.newProxyInstance(ReadData.class.getClassLoader(),new Class<?>[]{ReadData.class},new InvocationHandler(){
public Object invoke(Object proxy,Method method,Object[],args){
}
}};
o.findProductById(3);//該呼叫其實被動態代理機制攔截,執行的是invoke裡面的邏輯
3.利用動態代理封裝一個RPC框架
給客戶端一個動態代理物件,客戶就以為拿到了服務端的一個實現類的物件就愉快地調起了方法,他還以為真的在他的機器上呼叫到了這個方法,而本質上,他的呼叫行為被我們提供的動態代理物件上的invoke所攔截,在invoke中向遠端伺服器進行了通訊互動,拿到結果再返回給使用者。
4.執行緒安全問題
加一把執行緒鎖:
synchronized(標記,eg.SellRunnable.class);