夫陶公清风千古,余又何人,敢称庶几

文章目录

  • 前言
  • 一、系统日志是什么
  • 二、开发技术
  • 三、开发步骤
    • 3.1引入依赖坐标
      • 3.1.1 导入Lombok
      • 3.1.2 数据库连接依赖
      • 3.1.3 spring aop依赖
      • 3.1.4 aspectJ依赖
      • 3.1.5 Druid连接池(阿里巴巴)
      • 3.1.6 mybatis-plus依赖
    • 3.2配置application.yml
    • 3. 3编写实体类
      • 3.4.1系统用户实体
      • 3.4.2 日志实体
    • 3.4 编写日志注解
    • 3.5 编写通知类
    • 3.6 编写mapper
      • 3.6.1 LogMapper
      • 3.6.2 UserMapper
      • 3.6.3 编写mybaits-plus配置类
    • 3.7 编写service层
      • 3.7.1 UserService接口
      • 3.7.2 UserService实现代码
  • 四、代码测试
    • 4.1 编写测试类
    • 4.2 测试添加用户
    • 4.3 测试查看所有用户
  • 总结

前言

本文是对面向切面编程的简单应用。下文中用到的是后置通知实现日志的记录,当该方法执行以后,记录相关的日志信息。AspectJ中常用的注解:
@AspectJ:定义一个切面
@Before:前置通知
@AfterReturning:后置通知
@Around:环绕通知
@AfterThrowing:异常通知
@After:最终通知

提示:以下是本篇文章正文内容,下面案例可供参考

一、系统日志是什么

系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。系统日志包括系统日志、应用程序日志和安全日志。

二、开发技术

  1. idea 2019
  2. SpringBoot
  3. MybatisPlus
  4. Druid连接池

三、开发步骤

3.1引入依赖坐标

3.1.1 导入Lombok

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version><scope>provided</scope>
</dependency>

3.1.2 数据库连接依赖

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.48</version>
</dependency>

3.1.3 spring aop依赖

<dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.2.12.RELEASE</version>
</dependency>

3.1.4 aspectJ依赖

<dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.2.12.RELEASE</version>
</dependency>

3.1.5 Druid连接池(阿里巴巴)

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.4</version>
</dependency>

3.1.6 mybatis-plus依赖

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version>
</dependency>

3.2配置application.yml

server:port: 8088
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://localhost:3306/aop-test?useSSL=false&useUnicode=true&characterEncoding=UTF-8username: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver

代码如下(示例):

3. 3编写实体类

3.4.1系统用户实体


/*** <p>用户实体</p>* @author XinLiu */
@Data
@ToString
@TableName(value = "sysUser")
public class SysUser {/*** 主键*/@TableIdprivate String id;/*** 用户名*/@TableField("name")private String name;/*** 密码*/@TableField("password")private String password;/*** 创建时间*/@TableField("createDate")private Date createDate;
}

对应的数据表:

3.4.2 日志实体

/*** <p>日志实体</p>* @author XinLiu */
@Data
@ToString
@TableName("log")
public class SysLog {/*** 主键*/@TableIdprivate String id;/*** 访问的类名*/@TableField("className")private String className;/*** 执行的操作*/@TableField("methodName")private String methodName;/*** 创建日志时间*/@TableField("createDate")private Date createDate;}

对应的数据表:

3.4 编写日志注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log {/*** 执行操作的名称* @return 操作名*/String value() ;
}

3.5 编写通知类

这里其实是面向切面编程的典型应用,此处日志的实现用到了后置通知,也就是当访问的方法正确返回时执行此后置通知。首先我们需要编写一个切入点,也就是声明要执行那个方法或者那些方法,前面我们自定义了一个注解:@Log,此注解有一个属性value,它的作用是用于保存执行指定操作的名称;接下来我们需要编写一个后置通知,也就是增强的方法,方法需要一个参数JoinPoint joinPoint,通过它可以获得@Log注解,通过反射可以获得注解上的值,这个值就是操作名称,我们需要保存到日志表中;编写好通知后,我们就可以保存我们需要保存的日志信息了,比如:访问者用户名、请求参数、请求的URI、请求者IP地址、执行的操作等等。


/**<p>通知类</p>* @author XinLiu */
@SuppressWarnings("all")
@Component
@Aspect
public class LogAdvice {@Autowiredprivate LogMapper logMapper;/*** 配置切入点*/@Pointcut("@annotation(com.qingfeng.aoptest.common.anno.Log)")private void serviceAspect() {}/*** 后置通知,用于记录日志** @param joinPoint* @return* @throws Throwable*/@AfterReturning("serviceAspect()")public void doBefore(JoinPoint joinPoint) throws Throwable {MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();Method method = methodSignature.getMethod();Log log = method.getAnnotation(Log.class);SysLog sysLog = new SysLog();sysLog.setId((UUID.randomUUID().toString()).replaceAll("-", ""));sysLog.setClassName(joinPoint.getTarget().getClass().getName());sysLog.setMethodName(log.value());sysLog.setCreateDate(new Date());logMapper.insert(sysLog);}
}

3.6 编写mapper

3.6.1 LogMapper

简单解释一下,这里继承了一个BaseMapper<SysLog>类,通过继承该类 ,我们就可以使用mybatis plus里的方法,里面实现常用的操作,比如CRUD。

public interface LogMapper extends BaseMapper<SysLog> {}

3.6.2 UserMapper

/*** <p>系统用户数据层</p>* @author XinLiu*/
public interface UserMapper extends BaseMapper<SysUser> {}

3.6.3 编写mybaits-plus配置类

这是一个配置类,@Configuration注解的作用是,将此类交给ioc容器处理;@MapperScan("com.qingfeng.aoptest.mapper")的作用是扫描该包路径下的所有mapper接口,简化每次都要在mapper类上添加注解:@Mapper,如果配置了此类,就可以不用写@Mapper注解了。

@Configuration
@MapperScan("com.qingfeng.aoptest.mapper")
public class MybatisPlusConfig {}

3.7 编写service层

3.7.1 UserService接口

/*** @author XinLiu*/
public interface UserService extends IService<SysUser> {/*** 用户注册* @param sysUser 用户实体* @return*/public boolean reg(SysUser sysUser);/*** 查询所有的用户* @return*/public List<SysUser> queryAllUser();
}

3.7.2 UserService实现代码

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,SysUser>  implements UserService    {@Autowiredprivate UserMapper userMapper;/*** 用户注册** @param sysUser 用户实体* @return*/@Override@Log("用户注册")public boolean reg(SysUser sysUser) {return userMapper.insert(sysUser)>0;}@Override@Log("查询所有的用户")public List<SysUser> queryAllUser() {return userMapper.selectList(new QueryWrapper<SysUser>());}
}

四、代码测试

4.1 编写测试类

@SpringBootTest
@RunWith(SpringRunner.class)
class AopTestApplicationTests {@Autowiredprivate UserService userService;@Testvoid contextLoads() {}}

4.2 测试添加用户

@Test
public void testReg(){System.out.println(userService);SysUser sysUser = new SysUser();sysUser.setCreateDate(new Date());sysUser.setId((UUID.randomUUID().toString()).replaceAll("-",""));sysUser.setName("admin");sysUser.setPassword("123456");userService.reg(sysUser);}

运行结果:


4.3 测试查看所有用户

@Testpublic void  testFindAll(){List<SysUser> sysUsers = userService.queryAllUser();sysUsers.forEach(sysUser -> System.out.println(sysUser));}

运行结果:

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了如何通过注解的方式实现日志,以及AspectJ的使用, 对一个小白入门是有一些帮助的,此文也有很多东西未实现,因为没有写前端,所有日志中没有保存访问的用户。

原来记录系统日志那么简单【Java】【SpringBoot】【Mybatis Plus】【AspcetJ】相关推荐

  1. 【项目实战】 ---- 简单整合SpringBoot + MyBatis + Themyleaf小项目

    简单整合SpringBoot + MyBatis + Themyleaf小项目 一.项目环境搭建① 二.数据库表设计及项目环境② 三.图片验证码功能 四.用户注册功能 五.用户登录功能 六.员工的查询 ...

  2. 基于javaweb的在线游戏商城系统(java+springboot+mybatis+mysql+layui+jsp)

    基于javaweb的在线游戏商城系统(java+springboot+mybatis+mysql+layui+jsp) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/ ...

  3. 基于javaweb的精品养老院管理系统(java+springboot+mybatis+vue+mysql)

    基于javaweb的精品养老院管理系统(java+springboot+mybatis+vue+mysql) 运行环境 Java≥8.MySQL≥5.7.Node.js≥10 开发工具 后端:ecli ...

  4. 基于javaweb的医院管理系统(java+springboot+mybatis+vue+mysql)

    基于javaweb的医院管理系统(java+springboot+mybatis+vue+mysql) 运行环境 Java≥8.MySQL≥5.7.Node.js≥10 开发工具 后端:eclipse ...

  5. 基于javaweb+springboot的在线游戏商城系统(java+Springboot+MyBatis+MySQL+Maven+layui+Jsp)

    基于javaweb+springboot的在线游戏商城系统(java+Springboot+MyBatis+MySQL+Maven+layui+Jsp) 一.项目简述 功能包括: 用户管理,游戏商品管 ...

  6. Java程序员周末时间搞锭银行信息管理系统毕业设计(java+springboot+mybatis+mysql+vue+elementui)等实现 免费源码+论文答辩资料获取

    Java程序员周末时间搞锭银行信息管理系统毕业设计(java+springboot+mybatis+mysql+vue+elementui)等实现 前言介绍: 在社会快速发展的影响下,银行继续发展,大 ...

  7. 基于javaweb+mysql的酒店管理系统(java+springboot+mybatis+beetl+layui)

    基于javaweb+mysql的酒店管理系统(java+springboot+mybatis+beetl+layui) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/ ...

  8. 基于java(springboot+mybatis)汽车信息管理系统设计和实现以及文档

    java毕业设计项目<100套>推荐 主要实现技术:Java.springmvc.springboot.mysql.mybaits.jQuery.js.css等.使用eclipse/ide ...

  9. 基于javaweb的平行志愿管理系统(java+springboot+mybatis+vue+mysql)

    基于javaweb的平行志愿管理系统(java+springboot+mybatis+vue+mysql) 运行环境 Java≥8.MySQL≥5.7.Node.js≥10 开发工具 后端:eclip ...

  10. 基于javaweb的水果生鲜商城系统(java+springboot+mybatis+vue+mysql)

    基于javaweb的水果生鲜商城系统(java+springboot+mybatis+vue+mysql) 运行环境 Java≥8.MySQL≥5.7.Node.js≥10 开发工具 后端:eclip ...

最新文章

  1. Extreme 交换机基础配置命令
  2. clr enabled Server Configuration Option
  3. java 设备指纹_使用Socket In(JAVA)处理生物识别指纹考勤设备
  4. MemSQL可以为时间序列应用做些什么
  5. .net学习笔记----WebConfig常用配置节点介绍
  6. mysql计算订单总金额_mysql统计当天消费总额
  7. 中国工程院出台“八不准” 为院士增选“划红线”
  8. 【Oracle】数据库范式
  9. RabbitMQ消息队列入门篇(环境配置+Java实例+基础概念)
  10. WDS和DHCP配置说明
  11. sqlserver行列转换,动态行转换
  12. PHP初中高级学习在线文档下载
  13. Redux中的reducer到底是什么,以及它为什么叫reducer?
  14. 部署Unbound实现DNS服务
  15. 病历管理系统代码android,医院病例管理系统下载
  16. 高等数学:第五章 定积分(4) 定积分的换元法
  17. 局域网如何禁止腾讯游戏,网关(不是路由)怎样屏蔽DNF、穿越火线等游戏。...
  18. Python编写程序,生成包含20个随机数列表,然后将前十个元素升序排列,后十个元素降序排列,并输出结果。
  19. codeforces787A-The Monster
  20. Postfix邮件服务器搭建之虚拟用户配置

热门文章

  1. 世上最简单的mysql_最简单易懂的mysql安装教程
  2. 原始套接字编程(1)
  3. 现在完成时与过去完成时的区别
  4. #pragma code_seg(INIT)/code_seg(PAGE)
  5. Springboot 集成 Swagger
  6. 10个一行代码就能搞定的编程技巧
  7. 怎样用CDN防篡改、抗攻击、控内容?一份CDN安全指南请查收
  8. 超干货|使用Keras和CNN构建分类器(内含代码和讲解)
  9. 汽车电气化竞争:获胜的途径
  10. 云+X案例展 | 传播类:k3s基于逾百台工控机的应用实践