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); } }