Spring-service-mvc.xml

  1. <context:component-scan base-package="com.restful.controller,com.restful.aspect"/>
    <aop:aspectj-autoproxy proxy-target-class="true"/>

applicationcontext.xml

  1. <aop:aspectj-autoproxy proxy-target-class="true"/>
    <bean name="dapAspect" class="com.restful.aspect.DaoAspect"/>

DaoAspect:

  1. package com.restful.aspect;
  2.  
  3. import com.restful.model.MonitorAspectModel;
    import org.apache.log4j.Logger;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.springframework.stereotype.Component;
  4.  
  5. import java.util.Date;
  6.  
  7. @Aspect
    @Component
    public class DaoAspect {
  8.  
  9. private static Logger logger = Logger.getLogger(MonitorAspect.class);
  10.  
  11. private MonitorAspectModel mam = new MonitorAspectModel();
  12.  
  13. @Around(value = "execution(* com.restful.service.UserServiceImpl.*(..))")
    public Object controllerRunTime(ProceedingJoinPoint joinPoint) throws Throwable {
  14.  
  15. mam.setClassName(joinPoint.getClass().getName());
  16.  
  17. mam.setMethodName(joinPoint.getSignature().getName());
  18.  
  19. mam.setStartTime(System.currentTimeMillis());
  20.  
  21. mam.setStartDate(new Date());
  22.  
  23. logger.info("\n==UserService切面开始计时==\n");
  24.  
  25. // 代理类 执行目标
    Object object = joinPoint.proceed();
  26.  
  27. mam.setEndTime(System.currentTimeMillis());
  28.  
  29. mam.setRunTime(mam.getStartTime()-mam.getEndTime());
  30.  
  31. logger.info("\n info 日志记录: UserServiceImpl开始时间:" + mam.getStartDate() + "| 响应时间:" + mam.getRunTime() + "ms" + " | 执行类:" + mam.getClassName() + " | 执行方法:" + mam.getMethodName() + "\n");
    logger.debug("\n debug 日志记录: UserServiceImpl开始时间:" + mam.getStartDate() + "| 响应时间:" + mam.getRunTime() + "ms" + " | 执行类:" + mam.getClassName() + " | 执行方法:" + mam.getMethodName() + "\n");
  32.  
  33. return object;
    }
  34.  
  35. }

MonitorAspectModel:

  1. package com.restful.aspect;
  2.  
  3. import com.restful.model.MonitorAspectModel;
    import org.apache.log4j.Logger;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Pointcut;
    import org.junit.Test;
    import org.springframework.stereotype.Component;
  4.  
  5. import java.util.Date;
  6.  
  7. @Aspect
    @Component
    public class MonitorAspect {
  8.  
  9. private static Logger logger = Logger.getLogger(MonitorAspect.class);
  10.  
  11. private MonitorAspectModel mam = new MonitorAspectModel();
  12.  
  13. private Date date;
  14.  
  15. @Test
    public void trest(){
    logger.info("测试类");
    }
  16.  
  17. // @Pointcut(value = "execution(* com.restful.controller.*Controller*.*(..))")
    // private void controllerointcut(){}
  18.  
  19. // @Around(value = "controllerointcut()")
    @Around(value = "execution(* com.restful.controller.RestController.*(..))")
    public Object controllerRunTime(ProceedingJoinPoint joinPoint) throws Throwable {
  20.  
  21. mam.setClassName(joinPoint.getClass().getName());
  22.  
  23. mam.setMethodName(joinPoint.getSignature().getName());
  24.  
  25. mam.setStartTime(System.currentTimeMillis());
  26.  
  27. mam.setStartDate(new Date());
  28.  
  29. logger.info("\n==Controller切面开始计时==\n");
  30.  
  31. // 代理类 执行目标
    Object object = joinPoint.proceed();
  32.  
  33. mam.setEndTime(System.currentTimeMillis());
  34.  
  35. mam.setRunTime(mam.getStartTime()-mam.getEndTime());
  36.  
  37. logger.info("\n info 日志记录: Controller开始时间:" + mam.getStartDate() + "| 响应时间:" + mam.getRunTime() + "ms" + " | 执行类:" + mam.getClassName() + " | 执行方法:" + mam.getMethodName() + "\n");
    logger.debug("\n debug 日志记录: Controller开始时间:" + mam.getStartDate() + "| 响应时间:" + mam.getRunTime() + "ms" + " | 执行类:" + mam.getClassName() + " | 执行方法:" + mam.getMethodName() + "\n");
  38.  
  39. return object;
    }
  40.  
  41. }

Controller:

  1. package com.restful.controller;
  2.  
  3. import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.restful.model.Page;
    import com.restful.model.User;
    import com.restful.service.StudentServiceImpl;
    import com.restful.service.UserServiceImpl;
    import org.apache.log4j.Logger;
    import org.junit.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.servlet.ModelAndView;
  4.  
  5. import javax.servlet.http.HttpSession;
    import java.util.List;
  6.  
  7. @Controller
    @RequestMapping("/urg")
    //@RunWith(SpringJUnit4ClassRunner.class)
    //@ContextConfiguration(locations = {"classpath*:springmybatis.xml"})
    public class RestController {
  8.  
  9. private Logger logger = Logger.getLogger(RestController.class.getName());
    private String message = "可能遇到点问题…";
    private final String SUCCESS = "success";
  10.  
  11. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springmybatis.xml");
    UserServiceImpl userService = (UserServiceImpl) applicationContext.getBean("userService");
  12.  
  13. String mseeage = "似乎遇到点问题……";
    String info = "信息";
  14.  
  15. // 根据姓名查询,跳转到user页面
    @RequestMapping(value = "/user/{name}",method = RequestMethod.POST)
    public ModelAndView getStudentForName(@RequestParam("name")String name, ModelAndView modelAndView ){
  16.  
  17. logger.info("\n 输入的查询:" + name + "\n");
  18.  
  19. User user = new User();
    user.setName(name);
    List<User> users = userService.findByUser(user);
  20.  
  21. modelAndView.addObject("users",users);
    modelAndView.setViewName("/userlist");
  22.  
  23. return modelAndView;
    }
  24.  
  25. @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
    public String updre(@RequestParam("id")Integer id,Model model){
    logger.info("跳转upd修改页面,修改id:"+id);
    User user = userService.findById(id);
    user.setId(id);
    model.addAttribute("upduser",user);
    return "upd";
    }
  26.  
  27. // @ResponseBody
    @RequestMapping(value = "/user",method = RequestMethod.PUT)
    public ModelAndView upd(User user,ModelAndView modelAndView){
    logger.info("修改的数据:"+user);
    message = "修改失败";
    if(user!=null){
    if(userService.updateOne(user)!=0){
    message = "修改成功!";
    info = "修改信息";
    modelAndView.addObject("reguser",user);
    }
    }
    modelAndView.addObject("message",message);
    modelAndView.addObject("info",info);
    modelAndView.setViewName("redirect:user/usereditinfo");
    return modelAndView;
    }
  28.  
  29. @RequestMapping(value = "/user",method = RequestMethod.DELETE)
    public String del(@RequestParam("id")Integer id,Model model){
    logger.info("删除id:"+id);
    int del = userService.deleteOne(id);
    info="删除信息";
    if(del!=0) {
    message = "删除成功";
    }else {
    message = "删除失败";
    }
    model.addAttribute("message",message);
    return "redirect:list";
    }
  30.  
  31. @ResponseBody
    @RequestMapping(value = "/user/json",method = RequestMethod.GET)
    public ModelAndView jsonlist(@RequestParam(value = "jsonname",required = false)String name,ModelAndView modelAndView){
    logger.info("json 传入的name:" + name );
    User user = new User();
    if(name!=null && name!=""){
    user.setName(name);
    List<User> users = userService.findByUser(user);
    logger.info("查询到的users:" + users + "users的size:" + users.size());
    boolean flag = users.size()==0;
    logger.info(flag);
    if( users.size()==0 ){
    message = "查询失败";
    }else {
    //json字符串
    String usersJsonStr = JSON.toJSONString(users);
    //json对象
    JSON usersJson = (JSON) JSON.toJSON(users);
    message = "查询成功";
    modelAndView.addObject("usersJsonStr",usersJsonStr);
    modelAndView.addObject("usersJson",usersJson);
    logger.info(usersJsonStr);
    }
    }else {
    //前台已经检查是否为空,后台信息
    message = "查询姓名不能为空";
    }
    modelAndView.setViewName("jsonlist");
    modelAndView.addObject("message",message);
    return modelAndView;
    }
  32.  
  33. @RequestMapping(value = "/user/list")
    public String userList(@RequestParam(value = "nowpage",defaultValue = "1")Integer nowpage,
    @RequestParam(value = "pagesize",defaultValue = "5")Integer pagesize,Model model){
  34.  
  35. Page<User> page = userService.findByPage(nowpage,pagesize);
    model.addAttribute("nowPages",page);
    // requestToViewNameTranslator
    return "list";
    // return model;
    }
  36.  
  37. @RequestMapping(value = "/user/reg")
    public String reg(){
    logger.info("跳转reg注册页面");
    return "reg";
    }
    // @ResponseBody
    @RequestMapping(value = "/user/reg",method = RequestMethod.POST)
    public String reg(Model model,User user){
    logger.info("注册的参数:"+user.toString());
    int ids = userService.insertOne(user);
    if(ids!=0){
    message = "注册成功!";
    model.addAttribute("reguser",user);
    }
    model.addAttribute("message",message);
    return "userlist";
    }
  38.  
  39. @RequestMapping(value = "/login",method = RequestMethod.POST)
    public String login(@RequestParam("name")String name, @RequestParam("pwd")String pwd, HttpSession httpSession, Model model){
  40.  
  41. User user = new User();
    user.setName(name);
    user.setPwd(pwd);
    logger.info("登录信息:"+user.toString());
    info = "登录信息";
    message = "没有登陆信息!登录失败";
    List<User> users = userService.findByUser(user);
    if(users.size()!=0){
    for(User us : users){
    logger.info("查询匹配信息:" + us.toString());
    if(us.getName().equals(name) && us.getPwd().equals(pwd)){
    logger.info("正确匹配的:"+us.getName()+":"+us.getPwd()+" | ");
    message = "登陆成功!";
    httpSession.setAttribute("username",name);
    model.addAttribute("reguser",us);
    }else {
    logger.info("未匹配的:"+us.getName()+":"+us.getPwd()+" | ");
    message = "登陆失败!";
    }
    }
    }else {
    mseeage = "账号密码错误,登录失败!";
    }
    model.addAttribute("message",message);
  42.  
  43. return "userlist";
    }
  44.  
  45. //测试redirect:user/usereditinfo 跳转userlist 只有修改方法upd() 调用
    @RequestMapping(value = "user/usereditinfo")
    public String userlist(@RequestParam(value = "message",required = false)String message,
    @RequestParam(value = "info",required = false)String info,Model model){
    model.addAttribute("message",message);
    model.addAttribute("info",info);
    return "userlist";
    }
  46.  
  47. // 测试
    // @RequestMapping("/login")
    // public String logOut(HttpSession httpSession){
    // httpSession.invalidate();
    // return "forward:list";
    // }
  48.  
  49. // 测试
    // @RequestMapping(value = "/jgg")
    // public String jgg(){
    // logger.info("跳转jgg");
    // return "jgg";
    // }
  50.  
  51. }

SpringAOP 注解方式的更多相关文章

  1. SpringAOP(注解方式实现面向切面编程)之常用Before、After、Around

    一.首先在Springmvc.xml文件中引入如下内容(本示例是在ssm框架基础上实现的) 1.引入命名空间 xmlns:aop="http://www.springframework.or ...

  2. springAOP注解方式定义切入点报错error at ::0 can't find referenced pointcut

    [说明] 1.使用spring版本:4.0.4 2.springAOP相关依赖包: 1)aopalliance-1.0.jar 2)aspectjweaver-1.8.9.jar 3)aspectjr ...

  3. springAOP注解方式实现日志操作

    通过自定义注解调用方法执行日志存储: package com.zktx.platform.log2; import java.lang.reflect.Method; import java.util ...

  4. 【SpringAop】【统一日志处理】注解方式理解以及使用

    [注意:本次代码的demo会存在百度网盘,由于公司的保密,禁止上传,所以仅本人可见] 目前公司在做数据资产项目,数据质量部分使用到了springaop做统一日志处理,以前对这块有了解,有点模糊不清,今 ...

  5. spring与hibernate整合配置基于Annotation注解方式管理实务

    1.配置数据源 数据库连接基本信息存放到properties文件中,因此先加载properties文件 <!-- jdbc连接信息 --> <context:property-pla ...

  6. 注解方式实现Spring声明式事务管理

    1.编写实体类 public class Dept { private int deptId; private String deptName; public int getDeptId() { re ...

  7. 来一手 AOP 注解方式进行日志记录

    系统日志对于定位/排查问题的重要性不言而喻,相信许多开发和运维都深有体会. 通过日志追踪代码运行状况,模拟系统执行情况,并迅速定位代码/部署环境问题. 系统日志同样也是数据统计/建模的重要依据,通过分 ...

  8. spring 纯注解方式 与AOP

    spring注解方式 以前我也使用过纯注解方式.现在在这里做个记录 我们先认识几个我们都耳熟能详的注解 @configuration :从spring3.0这个注解就可以用于定义配置类,可以替换xml ...

  9. Spring声明式事务管理(基于注解方式实现)

    ----------------------siwuxie095                                 Spring 声明式事务管理(基于注解方式实现)         以转 ...

随机推荐

  1. Lintcode97-Maximum Depth of Binary Tree-Easy

    97. Maximum Depth of Binary Tree Given a binary tree, find its maximum depth. The maximum depth is t ...

  2. Hnoi-2017 滚粗记

    一路走来,OI生涯中最重要的一场比赛在10个小时的比赛后,在不止10个小时的焦急等待中,也就这么结束了呢... Day 0: 当时其实内心里面还是比较虚的,还记得在回家的路上和$DYC$大佬畅想我们省 ...

  3. Linux之文件目录

    一.Linux的目录结构 1.概览 2.树状目录结构 说明: /root:该目录为系统管理员用户主目录 /bin:即Binary,存放着系统必备执行命令 /boot:这里存放的是启动Linux时使用的 ...

  4. spark streaming 整合kafka(二)

    转载:https://www.iteblog.com/archives/1326.html 和基于Receiver接收数据不一样,这种方式定期地从Kafka的topic+partition中查询最新的 ...

  5. vuejs点滴

    博客0.没事的时候可以看的一些博客:https://segmentfault.com/a/1190000005832164 http://www.tuicool.com/articles/vQBbii ...

  6. Type I and type II errors | 第一类错误和第二类错误

    偶尔能看懂,但是死活记不住,归根结底是没有彻底理解! Type I and type II errors - wiki type I error is the rejection of a true  ...

  7. python学习(六)

  8. 判断网页打开浏览器类型,PC 手机端,微信浏览器,,,

    //判断网页打开浏览器类型,PC 手机端,微信浏览器,,, <script type="text/javascript"> var browser = { versio ...

  9. mysql索引 ->创建索引、修改索引、删除索引的命令语句

    查看表中已经存在 index:show index from table_name; 创建和删除索引索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER ...

  10. mst总结

     1.jsonp跨域 Jsop的原理:利用script不存在跨域的问题,动态创建script标签,把需要请求的数据源地址赋值给其src属性,并且指定一个回调函数,从而接受到我们想要的数据 后台设置下 ...