?? monitorfilereadsdirectly.aj~
字號:
package designpatterns.decorator.aspectjdirect;import java.io.InputStream;import java.util.Map;import java.util.WeakHashMap;import javax.swing.JComponent;public aspect MonitorFileReadsDirectly { private Map perStreamMonitor = new WeakHashMap(); pointcut singleRead(JComponent component, InputStream is): call(public int InputStream+.read()) && target(is) && fromAComponent(component); pointcut arrayRead(JComponent component, InputStream is) : call(public int InputStream+.read(..)) && target(is) && fromAComponent(component); pointcut fromAComponent(JComponent component) : cflow(execution(* javax.swing.JComponent+.*(..)) && this(component)); after(JComponent component, InputStream is) returning : singleRead(component, is) { updateMonitor(component, is, 1); } after(JComponent component, InputStream is) returning (int bytesRead) : arrayRead(component, is) {// updateMonitor(component, is, bytesRead); } before(InputStream is): call(public void InputStream+.close()) && target(is) { System.out.println("Discarding monitor."); perStreamMonitor.remove(is); } private void updateMonitor(JComponent component, InputStream is, int amount){ IncrementMonitor monitor = (IncrementMonitor)perStreamMonitor.get(is); if(monitor == null){ monitor = initMonitor(is, component); } monitor.increment(amount); } protected IncrementMonitor initMonitor(InputStream is, JComponent component){ try { int size = is.available(); IncrementMonitor monitor = new IncrementMonitor(component, size); perStreamMonitor.put(is, monitor); return monitor; } catch (Exception e) { throw new RuntimeException(e); } } }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -