java aspectJ

1.先写一个切面

@Aspect
@Component
public class LogAspect {
@Autowired
private AlogService alogService;

//controller进行添加删除修改执行
@Pointcut("execution(* com.wcy.controller.admin.*.add(..))"
+"||execution(* com.wcy.controller.admin.*.delete(..))"
+"||execution(* com.wcy.controller.admin.*.edit(..))")
//使用一个返回值为void,方法体为空的方法来命名切入点
public void myPointCut() {

}


@AfterReturning("myPointCut()")
//后置通知
public void myAfterReturning(JoinPoint joinPoint) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
HttpSession session = request.getSession();
//读取session中的用户
User user=(User)session.getAttribute("admin");
//请求的IP
String ip = request.getRemoteAddr();
Alog aLog=new Alog();
aLog.setContent("请求方法:" + (joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()"));
aLog.setCreateTime(new Date());
aLog.setIp(ip);
aLog.setName(user.getUsername());
aLog.setType("INFO");
this.alogService.addAlog(aLog);//插入到数据库
/* System.out.println("请求方法:" + (joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()")+"\n"+user.getUsername());
System.out.println("请求人:" + user.getUsername());
System.out.println("请求IP:" + ip);*/

}

@AfterThrowing(value="myPointCut()",throwing="e")
//异常通知
public void myAfterThrowing(JoinPoint joinPoint,Throwable e) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
HttpSession session = request.getSession();
//读取session中的用户
User user=(User)session.getAttribute("admin");
//请求的IP
String ip = request.getRemoteAddr();
Alog aLog=new Alog();
aLog.setContent("请求方法:" + (joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()")+"\n"+e.getMessage());
aLog.setCreateTime(new Date());
aLog.setIp(ip);
aLog.setName(user.getUsername());
aLog.setType("ERROR");
this.alogService.addAlog(aLog);//插入到数据库
/* System.out.println("请求方法:" + (joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()")+"\n"+user.getUsername());
System.out.println("请求人:" + user.getUsername());
System.out.println("请求IP:" + ip);
System.out.println("异常通知:出错了"+e.getMessage());*/
}

}

 

2.因为是以controller的方法为切入点 所以需要在SpringMVC里面配置切面

<!-- 激活组件扫描功能,在包cn.edu.pzxx.scampus及其子包下面自动扫描通过注解配置的组件-->
<context:component-scan base-package="com.wcy.aspectj" />
<!-- 启动对@AspectJ注解的支持 -->
<!-- proxy-target-class等于true是强制使用cglib代理,proxy-target-class默认是false,如果你的类实现了接口 就走JDK代理,如果没有,走cglib代理 -->
<!-- 注:对于单利模式建议使用cglib代理,虽然JDK动态代理比cglib代理速度快,但性能不如cglib -->
<aop:aspectj-autoproxy proxy-target-class="true"/>

3.这样在进行增删改就会有切入。

posted @ 2020-03-22 14:19  Pawn_wcy  阅读(285)  评论(0编辑  收藏  举报