Spring AOP 描述的例子(使用AOP记录日志)

日志,需要记录管理员操作日志,

这里需要传递2个参数, 文章的编号, 和 SESSION

@Aspect

@Controller

public class ControllerAopTest {

@Pointcut(

value = "execution(* net.watermelon.cms.web.PostController.*(java.lang.Integer,*,javax.servlet.http.HttpServletRequest,..)) && args(id,*,request,..)",  

    argNames = "id,request")   //注意那个 args(id,..) 这样才能找到

private void p(Integer id,HttpServletRequest request){//此切入点的签名可以在别处调用此定义  

@After(value="p(id,request)",argNames = "id,request")

private void  afterP(JoinPoint joinPoint,Integer id,HttpServletRequest request){  //JoinPoint 放在第一个参数

UserSession userSession = (UserSession) request.getSession().getAttribute("userSession");

   Signature signature = joinPoint.getSignature();

       MethodSignature methodSignature = (MethodSignature) signature;  

       Method method = methodSignature.getMethod();  

         method.getName(); 

       if(method != null) //写入库吧

       {

       

       PostAdminOpro postAdminOpro = new PostAdminOpro();

       

       postAdminOpro.setOperDate(new Date());

       postAdminOpro.setOperName(method.getAnnotation(PostLog.class).value());

       postAdminOpro.setPostId(id);

       postAdminOpro.setUserId(userSession.getUserLoginId());

       commonManager.save(postAdminOpro);

       

       }

}

PostController 类似这样的函数

       @PostLog("保存/修改")

@RequestMapping("/savePost.do")

public String savePost(@ModelAttribute Post post, BindingResult result,

SessionStatus status, HttpServletRequest request,

HttpServletResponse response) {

       @PostLog("保存/修改")  是自定义的注释

这样写:

@Target({ElementType.METHOD})  

@Retention(RetentionPolicy.RUNTIME)

public @interface PostLog{

String value() default "";

}

猜你喜欢

转载自guanxi.iteye.com/blog/2248795
今日推荐