SpringAOP 注解方式
Spring-service-mvc.xml
<context:component-scan base-package="com.restful.controller,com.restful.aspect"/>
<aop:aspectj-autoproxy proxy-target-class="true"/>
applicationcontext.xml
<aop:aspectj-autoproxy proxy-target-class="true"/>
<bean name="dapAspect" class="com.restful.aspect.DaoAspect"/>
DaoAspect:
package com.restful.aspect; 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; import java.util.Date; @Aspect
@Component
public class DaoAspect { private static Logger logger = Logger.getLogger(MonitorAspect.class); private MonitorAspectModel mam = new MonitorAspectModel(); @Around(value = "execution(* com.restful.service.UserServiceImpl.*(..))")
public Object controllerRunTime(ProceedingJoinPoint joinPoint) throws Throwable { mam.setClassName(joinPoint.getClass().getName()); mam.setMethodName(joinPoint.getSignature().getName()); mam.setStartTime(System.currentTimeMillis()); mam.setStartDate(new Date()); logger.info("\n==UserService切面开始计时==\n"); // 代理类 执行目标
Object object = joinPoint.proceed(); mam.setEndTime(System.currentTimeMillis()); mam.setRunTime(mam.getStartTime()-mam.getEndTime()); 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"); return object;
} }
MonitorAspectModel:
package com.restful.aspect; 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; import java.util.Date; @Aspect
@Component
public class MonitorAspect { private static Logger logger = Logger.getLogger(MonitorAspect.class); private MonitorAspectModel mam = new MonitorAspectModel(); private Date date; @Test
public void trest(){
logger.info("测试类");
} // @Pointcut(value = "execution(* com.restful.controller.*Controller*.*(..))")
// private void controllerointcut(){} // @Around(value = "controllerointcut()")
@Around(value = "execution(* com.restful.controller.RestController.*(..))")
public Object controllerRunTime(ProceedingJoinPoint joinPoint) throws Throwable { mam.setClassName(joinPoint.getClass().getName()); mam.setMethodName(joinPoint.getSignature().getName()); mam.setStartTime(System.currentTimeMillis()); mam.setStartDate(new Date()); logger.info("\n==Controller切面开始计时==\n"); // 代理类 执行目标
Object object = joinPoint.proceed(); mam.setEndTime(System.currentTimeMillis()); mam.setRunTime(mam.getStartTime()-mam.getEndTime()); 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"); return object;
} }
Controller:
package com.restful.controller; 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; import javax.servlet.http.HttpSession;
import java.util.List; @Controller
@RequestMapping("/urg")
//@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(locations = {"classpath*:springmybatis.xml"})
public class RestController { private Logger logger = Logger.getLogger(RestController.class.getName());
private String message = "可能遇到点问题…";
private final String SUCCESS = "success"; ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springmybatis.xml");
UserServiceImpl userService = (UserServiceImpl) applicationContext.getBean("userService"); String mseeage = "似乎遇到点问题……";
String info = "信息"; // 根据姓名查询,跳转到user页面
@RequestMapping(value = "/user/{name}",method = RequestMethod.POST)
public ModelAndView getStudentForName(@RequestParam("name")String name, ModelAndView modelAndView ){ logger.info("\n 输入的查询:" + name + "\n"); User user = new User();
user.setName(name);
List<User> users = userService.findByUser(user); modelAndView.addObject("users",users);
modelAndView.setViewName("/userlist"); return modelAndView;
} @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";
} // @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;
} @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";
} @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;
} @RequestMapping(value = "/user/list")
public String userList(@RequestParam(value = "nowpage",defaultValue = "1")Integer nowpage,
@RequestParam(value = "pagesize",defaultValue = "5")Integer pagesize,Model model){ Page<User> page = userService.findByPage(nowpage,pagesize);
model.addAttribute("nowPages",page);
// requestToViewNameTranslator
return "list";
// return model;
} @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";
} @RequestMapping(value = "/login",method = RequestMethod.POST)
public String login(@RequestParam("name")String name, @RequestParam("pwd")String pwd, HttpSession httpSession, Model model){ 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); return "userlist";
} //测试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";
} // 测试
// @RequestMapping("/login")
// public String logOut(HttpSession httpSession){
// httpSession.invalidate();
// return "forward:list";
// } // 测试
// @RequestMapping(value = "/jgg")
// public String jgg(){
// logger.info("跳转jgg");
// return "jgg";
// } }
SpringAOP 注解方式的更多相关文章
- SpringAOP(注解方式实现面向切面编程)之常用Before、After、Around
一.首先在Springmvc.xml文件中引入如下内容(本示例是在ssm框架基础上实现的) 1.引入命名空间 xmlns:aop="http://www.springframework.or ...
- 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 ...
- springAOP注解方式实现日志操作
通过自定义注解调用方法执行日志存储: package com.zktx.platform.log2; import java.lang.reflect.Method; import java.util ...
- 【SpringAop】【统一日志处理】注解方式理解以及使用
[注意:本次代码的demo会存在百度网盘,由于公司的保密,禁止上传,所以仅本人可见] 目前公司在做数据资产项目,数据质量部分使用到了springaop做统一日志处理,以前对这块有了解,有点模糊不清,今 ...
- spring与hibernate整合配置基于Annotation注解方式管理实务
1.配置数据源 数据库连接基本信息存放到properties文件中,因此先加载properties文件 <!-- jdbc连接信息 --> <context:property-pla ...
- 注解方式实现Spring声明式事务管理
1.编写实体类 public class Dept { private int deptId; private String deptName; public int getDeptId() { re ...
- 来一手 AOP 注解方式进行日志记录
系统日志对于定位/排查问题的重要性不言而喻,相信许多开发和运维都深有体会. 通过日志追踪代码运行状况,模拟系统执行情况,并迅速定位代码/部署环境问题. 系统日志同样也是数据统计/建模的重要依据,通过分 ...
- spring 纯注解方式 与AOP
spring注解方式 以前我也使用过纯注解方式.现在在这里做个记录 我们先认识几个我们都耳熟能详的注解 @configuration :从spring3.0这个注解就可以用于定义配置类,可以替换xml ...
- Spring声明式事务管理(基于注解方式实现)
----------------------siwuxie095 Spring 声明式事务管理(基于注解方式实现) 以转 ...
随机推荐
- Java 成员变量和属性的区别
例一: 一个Student pojo类: public class Student{ private String name; private int age; public String getNa ...
- 8、zabbix监控方式及分布式监控(04)
zabbix支持的监控方式 zabbix所能够显示的且可指定为监控接口类型的监控方式: Agent passive active SNMP:Simple Network Management Prot ...
- phpmyadmin-您可能正在上传很大的文件,请参考文档来寻找解决方法
phpmyadmin-您可能正在上传很大的文件,请参考文档来寻找解决方法 实这个很简单的只要更改php.ini里三个配置即可.(见下面加粗部分,改成你自己的需求即可) ; Maximum allo ...
- e1000e 网卡如遇到大包未线速问题解法
e1000e 网卡如遇到大包(>1280)未线速,把'DEFAULT_ITR'改为0, 不设中断频率上限试试 see@intel/e1000e/param.c/* Interrupt Throt ...
- VUE.js 简单引用
Vue开发的两种方式:静态资源引入开发 和 脚手架交互式开发 这里使用的是静态资源引入开发 首先 引用jquery.js 和 vue.js html 标签内加个 <div id=" ...
- 『计算机视觉』Mask-RCNN_训练网络其二:train网络结构&损失函数
Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...
- linux安装elasticsearch-head和elasticsearch-analysis-ik及遇到的各种问题
1.获取elasticsearch-head http://mobz.github.io/elasticsearch-head/ 下载并解压 wget https://github.com/mobz/ ...
- WebApi 全局使用filter
先上代码: public static class WebApiConfig { public static void Register(HttpConfiguration config) { // ...
- Php的基本语法学习
1.php语法 当 PHP 解析一个文件时,会寻找开始和结束标记,标记告诉 PHP 开始和停止解释其中的代码. 1)标记语法 是以<?php 开头,?> 结束,相当于html标签的开始标签 ...
- 学习笔记-AngularJs(十)
前面一直在说自定义指令,但是却一直没有一次系统地去了解,现在需要我们一起来学习如何去使用自定义指令,去丰富html标签.属性,实现多元化.多功能的标签(或是属性).辣么,啥是指令?要了解指令,首先需要 ...