当前位置: 首页 > news >正文

SpringBoot中AOP的配置

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

面向切面编程算是spring中的高阶应用,常见的日志采集,支付网关功能都有面向切面的工程思想,它就相当于进入地铁站时,那个等待我们的刷卡机一样,所有人乘地铁里必须经过刷卡机,它会验证你卡里的钱够不够,普通用户卡里钱不够不让过,地铁工作人员的员工卡随意过。

面向切面编程时也存在这道门,就是所谓的关注点(pointcut又称切入点,我习惯称之为关注点),类似于上面的刷卡机,有了这关注点,我们就可以围绕这个关注点做一些我们想做的事情,执行一些验证操作,类似于上面的判断用户身份,卡内金额,执行的动作可以放在关注点的某个时机去做,如@Around @Before @After,下面就详细列举一下AOP的配置方式

1.添加aop依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2.添加依赖之后,要开启AOP

@EnableAutoConfiguration
@EnableAspectJAutoProxy
@ComponentScan(basePackages = "org.sun.spring")
/***
 *EnableAspectJAutoProxy开启切面编程
 *ComponentScan指定包之后,SpringBoot会自动扫描该包下面的功能,如Controller,Model,Aspect功能
 *org.sun.spring是我的包名,各位看客自行修改成自己的package name
 */
public class Bootstrap {

	public static void main(String[] args) {
		SpringApplication.run(new Object[] {Bootstrap.class}, args);
	}

}

3.开始写代码进行切面编程

package org.sun.spring.aspect;

import org.apache.log4j.Logger;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class RequestLogAop {

	private final Logger logger = Logger.getLogger(getClass());
	
	@Pointcut("execution( * org.sun.spring.controller.*.*(..))")
	public void pointCutAt() {
		
	}
	
	@Before("pointCutAt()")
	public void beforeAction() {
		logger.fatal("在处理请求前,必须经过我!!!");
	}
	
}

上面就是最简洁的AOP案例了,学会使用之后,体会一下整个注解的流程

工程包:https://github.com/Freshman585/spring-boot-example

转载于:https://my.oschina.net/netflasher/blog/730148

相关文章:

  • iOS标准库中常用数据结构和算法之查找
  • CoreText实现图文混排之点击事件-b
  • 性能优化技巧 - 集群维表
  • 不同机器下,游戏编程如何保证物体移动具有相同的速度
  • 量子通信是个鸡肋,没有证券分析师说得那么好
  • 微信,QQ这类IM app怎么做——谈谈Websocket
  • DRF如何序列化外键的字段
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • iOS开发UI篇—CAlayer层的属性
  • Surrogate data 代理数据
  • 延迟
  • 网络设备
  • 马哥2016全新Linux+Python高端运维班第二周作业
  • 如何搭建配置php开发环境
  • 选择阿里云数据库HBase版十大理由
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • C++类的相互关联
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Magento 1.x 中文订单打印乱码
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Terraform入门 - 3. 变更基础设施
  • 工程优化暨babel升级小记
  • 关于for循环的简单归纳
  • 京东美团研发面经
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 使用API自动生成工具优化前端工作流
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 数据结构java版之冒泡排序及优化
  • 算法-图和图算法
  • 为视图添加丝滑的水波纹
  • 字符串匹配基础上
  • Prometheus VS InfluxDB
  • 翻译 | The Principles of OOD 面向对象设计原则
  • # Java NIO(一)FileChannel
  • ###C语言程序设计-----C语言学习(3)#
  • #《AI中文版》V3 第 1 章 概述
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (LeetCode) T14. Longest Common Prefix
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (四)Linux Shell编程——输入输出重定向
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)四层和七层负载均衡的区别
  • .a文件和.so文件
  • .cfg\.dat\.mak(持续补充)
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .Net Web项目创建比较不错的参考文章
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .Net面试题4
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .NET值类型变量“活”在哪?