spring aop 日志拦截器


spring 日志拦截器,拦截beanName以"Ctrl"结尾的bean


public class LogFileInterceptor implements MethodInterceptor, ThrowsAdvice {

	private static Logger logger = Logger.getLogger(LogFileInterceptor.class);

	public Object invoke(MethodInvocation invocation) throws Throwable {
		Long start = System.currentTimeMillis();
		StringBuffer sb = new StringBuffer();
		sb.append(invocation.getThis().getClass().getName());
		sb.append(".");
		sb.append(invocation.getMethod().getName());
		sb.append("(");
		sb.append(getArgs(invocation.getArguments()));
		sb.append(")");
		Object obj = null;
		obj = invocation.proceed();
		long end = System.currentTimeMillis();
		sb.append("-->runtime:");
		sb.append(start);
		sb.append("--");
		sb.append(end);
		logger.info(sb.toString());
		return obj;

	}

	public void afterThrowing(Method method, Object[] args, Object object, Throwable throwable) {
		logger.error(object.getClass().getName() + "." + method.getName() + "(" + getArgs(args) + ")", throwable);
	}

	private String getArgs(Object[] args) {
		StringBuffer sb = new StringBuffer();
		String reval = null;
		if (args.length > 0) {
			for (int i = 0; i < args.length; i++) {
				sb.append(args[i]);
				sb.append(",");
			}
			reval = sb.substring(0, sb.length() - 1);
		}
		return reval;
	}
}



	<!-- action自动代理 -->
	<bean name="logAutoProxy"
		class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
		<property name="proxyTargetClass" value="true" />
		<property name="beanNames">
			<list>
				<value>*Ctrl</value>
			</list>
		</property>
		<property name="interceptorNames">
			<list>
				<value>logFileInterceptor</value>
			</list>
		</property>
	</bean>

	<bean id="logFileInterceptor" class="com.gangling.MmoLogFileInterceptor">

	</bean>

猜你喜欢

转载自gangling.iteye.com/blog/2291375
今日推荐