⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monitorfilereadsdirectly.aj~

📁 designpatterns for aop
💻 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 + -