1.spring配置,本文采用xml配置方式
配置文件爲:
<bean id="springAop" class="com.XXX.share.XXXX.SpringAop"/>//實現定義方法的類路徑 <aop:config proxy-target-class="false"> <aop:aspect id="addAop" ref="springAop"> <!--interceptorUpdate--> <aop:pointcut id="addPointCut" expression="execution(* com.XXX.share.service.*.add*(..))" />//掃描路徑 <aop:around pointcut-ref="addPointCut" method="doAround"/> </aop:aspect> <aop:aspect id="updateAop" ref="springAop"> <!--interceptorUpdate--> <aop:pointcut id="updatePointCut" expression="execution(* com.XXX.share.service.*.update*(..))" /> <aop:around pointcut-ref="updatePointCut" method="doAround"/> </aop:aspect> </aop:config>
2.寫實體類
public class SpringAop { private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(SpringAop.class); /** * 攔截service層所有update,add開頭的方法 * @param jp * @return * @throws Throwable */ public Object doAround(ProceedingJoinPoint jp) throws Throwable { Object[] args = jp.getArgs();//實體類的參數 String methodUrl = jp.getSignature().getDeclaringTypeName(); //實現類路徑 String methodName = jp.getSignature().getName();//方法名 //寫自己的方法 return jp.proceed(); }
3.該方式僅能攔截controller調用的方法,無法攔截service內部調用的方法。
攔截service內部方法需將調用的service重新實例化,具體方法爲:
XXXX bean = (XXXX)SpringContextUtil.getBean(XXXX.class);其中XXXX爲實現類的類名 bean.method(....);//其中....爲傳的參數
4.SpringContextUtil類的實現
@Component public class SpringContextUtil implements ApplicationContextAware { // Spring應用上下文環境 private static ApplicationContext applicationContext; /** * 實現ApplicationContextAware接口的回調方法,設置上下文環境 * * @param applicationContext */ public void setApplicationContext(ApplicationContext applicationContext) { SpringContextUtil.applicationContext = applicationContext; } /** * @return ApplicationContext */ public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 獲取對象 * * @param name * @return Object * @throws */ public static Object getBean(String name) { return applicationContext.getBean(name); } public static <T> T getBean(Class<T> requiredType) { return applicationContext.getBean(requiredType); } }