<property name="target">
<bean
class="org.beangle.orm.hibernate.HibernateEntityDao"
autowire="byName">
</bean>
</property>
</bean>
<bean id="afterPrinter" class="com.ekingstar.eams.interceptor.AfterSaveOrUpdate" />
<!-- 通知器或切面 -->
<bean id="methodPointcutAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref local="afterPrinter"/>
</property>
<property name="patterns">
<list>
<value>.*saveOrUpdate</value>
<value>.*get</value>
</list>
</property>
</bean>
<!-- 自动代理 -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>entityDao</value>
</property>
<property name="interceptorNames">
<list>
<value>methodPointcutAdvisor</value>
</list>
</property>
</bean>
拦截器类:
package com.ekingstar.eams.interceptor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import org.springframework.aop.AfterReturningAdvice;
import com.ekingstar.eams.teach.lesson.CourseGradeState;
import com.ekingstar.eams.teach.lesson.model.CourseGradeStateBean;
public class AfterSaveOrUpdate implements AfterReturningAdvice {
static{
System.out.println("============>");
}
/**
* rObj:调用方法返回的对象;
* method:调用的方法;
* args:调用方法所传的参数数组;
* cObj:调用的类对象;
*/
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) {
try {
// 由于数组是 object 因此使用 instanceof 不起作用取出来都是数组的对象类型,因此这里使用强制转换,捕获异常
List<CourseGradeState> states = new ArrayList<CourseGradeState>();
// for (Object argArray : args) {
// for (Object arg : (Object[]) argArray) {
// if (arg instanceof CourseGradeStateBean) {
// CourseGradeStateBean gradeState = (CourseGradeStateBean) arg;
// states.add(gradeState);
// }
// }
// }
// 如果非state 类,直接返回
// if (states.size() == 0) {
// return;
// }
String content = "";
for (CourseGradeState state : states) {
content = content + "任务序号:" + state.getLesson().getNo() + " 课程序号:" + state.getLesson().getCourse().getCode() + " 状态:" + state.getStatus() + "</br>";
}
// EntityDao entityDao = (EntityDao) target;
// LogSaveOrUpdate log = Model.newInstance(LogSaveOrUpdate.class);
Throwable ex = new Throwable();
StackTraceElement[] stackElements = ex.getStackTrace();
System.out.println(stackElements[5].getClassName());
System.out.println(stackElements[5].getFileName());
System.out.println(stackElements[5].getLineNumber());
System.out.println(stackElements[5].getMethodName());
// log.setOrderAction(stackElements[5].getClassName());
// log.setUserId(SecurityUtils.getUserId().toString());
// log.setUserName(SecurityUtils.getUsername());
// log.setCreatedAt(new Date());
// log.setContent(content);
// entityDao.save(log);
} catch (Exception e) {
e.printStackTrace();
}
}
}