1. 程式人生 > >spring 面向切面程式設計,在執行SQL時列印類名及方法名

spring 面向切面程式設計,在執行SQL時列印類名及方法名

需求:在所有列印SQL語句前,加上SQL所在的類名及方法名。

解決方法:使用spring面向切面程式設計。

具體程式碼:

package com.hys.qiantai.struts.action.liveservice;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.log4j.Logger;
/**
 */
public class LogDaoMethodPointcut implements MethodInterceptor {
	
	private static final Logger logger = Logger.getLogger(LogDaoMethodPointcut.class);
	
	@Override
	public Object invoke(MethodInvocation arg0) throws Throwable {
		System.out.println("Before: class: {} " + arg0.getThis().getClass());
		System.out.println("Method name: {} " + arg0.getMethod().getName());
		logger.info("Before: class: {} " + arg0.getThis().getClass());
		logger.info("Method name: {} " + arg0.getMethod().getName());  
        return arg0.proceed(); 
	}

}
在spring xml檔案中新增切面:
<!-- 方法攔截器  MethodInterceptor applicationContext_transaction.xml -->  
  <bean id="logDaoMethodPointcut" class="com.hys.qiantai.struts.action.liveservice.LogDaoMethodPointcut"></bean>
  <aop:config proxy-target-class="true">  
      <aop:pointcut id="daoMethodPointcut" expression="execution(* com.hys.exam.dao.local.jdbc.*.*(..))"/>  
      <aop:advisor advice-ref="logDaoMethodPointcut" pointcut-ref="daoMethodPointcut" />  
  </aop:config>