【AOP】基于@Aspect的AOP配置
基于spring cloud的aop配置
1,启动类MemberAppliaction增加注解
@Import({SwaggerConfiguraion.class, WebMvcAutoConfiguration.class})
@SpringBootApplication
@FFanApplication
@EnableFFanApiDoc
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy=true) //启动aspect的aop注解
@EnableAutoConfiguration
@EnableTransactionManagement
@EnableDiscoveryClient
@ComponentScan(basePackages = {"cn.wanda.sail.member"})
@MapperScan(basePackages = {"cn.wanda.sail.member.mapper"})
@EnableFeignClients(basePackages = {"cn.wanda.sail.member.client"})
public class MemberApplication {
2,定义切面类
@Aspect
@Component
public class ProcessorAspect { private static final Logger log = LoggerFactory.getLogger(ProcessorAspect.class);
3,定义切入方法
@Around("execution(public * cn.wanda.sail.member.task.support.MemberTask.process(..))") //环绕增强
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
if (joinPoint.getArgs() == null || joinPoint.getArgs().length == 0) {
return joinPoint.proceed();
}
TaskContext task = (TaskContext) joinPoint.getArgs()[0];
log.info("LOG00020: {} start.....", task.getTaskId());
long start = System.currentTimeMillis();
Object result = null;
try {
result = joinPoint.proceed(); //执行目标方法
} catch (Exception exception) {
handleException(task.getTaskId(), exception);
}
log.info("LOG00040: {} end cost : {} ms", task.getTaskId(), (System.currentTimeMillis() - start));
return result;
}
4,常用的切入方法
(1),后置返回通知
@AfterReturning("execution(* com.sxit..*.*(..))")
(2),后置异常通知
@AfterThrowing("execution(* com.sxit..*.*(..))")
(3),后置最终通知
@After("execution(* com.sxit..*.*(..))")
(4),环绕通知
("execution(* com.sxit..*.*(..))")
(5),前置通知
@Before("execution(* com.sxit..*.*(..))")
5,定义切入点
@Pointcut("execution(* com.sxit..*.*(..))") //针对具体要切入的方法进行说明,如果这块有说明,则切入方法@Before,@Around 都可不用再声明其具体的切入方法,直接声明pointcut声明的方法即可
public void init(){
}
@Before(value="init()")
public void before(){
System.out.println("方法执行前执行.....");
}
AOP详解
AOP核心概念
1、横切关注点
对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点
2、切面(aspect)
类是对物体特征的抽象,切面就是对横切关注点的抽象
3、连接点(joinpoint)
被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器
4、切入点(pointcut)
对连接点进行拦截的定义
5、通知(advice)
所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类
6、目标对象
代理的目标对象
7、织入(weave)
将切面应用到目标对象并导致代理对象创建的过程
8、引入(introduction)
在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段
【AOP】基于@Aspect的AOP配置的更多相关文章
- spring 注解 之 AOP基于@Aspect的AOP配置
Spring AOP面向切面编程,可以用来配置事务.做日志.权限验证.在用户请求时做一些处理等等.用@Aspect做一个切面,就可以直接实现. 1.首先定义一个切面类,加上@Component @A ...
- spring aop 基于schema的aop
AOP的基本概念: 连接点(Jointpoint):表示需要在程序中插入横切关注点的扩展点,连接点可能是类初始化.方法执行.方法调用.字段调用或处理异常等等,Spring只支持方法执行连接点,在AOP ...
- 【Spring】基于@Aspect的AOP配置
Spring AOP面向切面编程,可以用来配置事务.做日志.权限验证.在用户请求时做一些处理等等.用@Aspect做一个切面,就可以直接实现. · 本例演示一个基于@Aspect的小demo 1. ...
- 基于@Aspect的AOP配置
1. Spring 除了支持Schema 方式配置 AOP,还支持注解方式:使用 @Aspect 来配置 2. Spring 默认不支持 @Aspect 风格的切面声明,通过如下配置开启@Aspect ...
- spring-第十七篇之spring AOP基于注解的零配置方式
1.基于注解的零配置方式 Aspect允许使用注解定义切面.切入点和增强处理,spring框架可以识别并根据这些注解来生成AOP代理.spring只是用了和AspectJ 5一样的注解,但并没有使用A ...
- 第三章 AOP 基于Schema的AOP
基于Schema定义的切面和前现两种方式定义的切面,内容上都差不多,只是表现形式不一样而已. 3.7.1一般增强的使用 a.目标类 public class Target { public void ...
- 基于aspect实现AOP——xml配置的其他操作
将上方配置中的前置通知,可换成环绕通知
- Spring AOP基于注解的“零配置”方式实现
为了在Spring中启动@AspectJ支持,需要在类加载路径下新增两个AspectJ库:aspectjweaver.jar和aspectjrt.jar.除此之外,Spring AOP还需要依赖一个a ...
- 第三章 AOP 基于@AspectJ的AOP
在前面,我们分别使用Pointcut.Advice.Advisor接口来描述切点.增强.切面.而现在我们使用@AdpectJ注解来描述. 在下面的例子中,我们是使用Spring自动扫描和管理Bean. ...
随机推荐
- javascript中的垃圾回收
1引用计数垃圾回收 核心:跟踪记录对象被引用的次数.思路是如果一个对象A被赋值给了一个变量v,则该对象A的引用计数值加1,如果变量v又被赋予其他值了,比如a="str",则该对象A ...
- Object c 基础知识
文件类型说明:.h 头文件,用于定义类.实例变量及类中的方法等定义信息(interface). .m 源文件,定义方法体,可实现objce-c和c方法(implementation). .mm c++ ...
- Celery 与 Flask 大型程序结构的结合
:first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...
- FZU2282 Wand
题意 n个数字,要求至少k个数字位置不变,其余进行错排的方案数 分析 错排公式: D(n)=(n-1)[D(n-2)+D(n-1)] 如果n个数字,i个数字位置不变,其余进行错排的的方案数是C(n, ...
- php+mysql网站无限级栏目分类-递归获取树形结构函数
如果网站采用了无限级栏目结构,我们可以将网站所有栏目获取出来组成一个树形结构.数据库结构: 函数代码: //获得指定文章分类的子分类组成的树形结构 function cateTree($pid=0,$ ...
- ls -al
ls -al:显示当前文件下所有的文件
- python3-递归
# Auther: Aaron Fan """递归特性:1. 必须有一个明确的结束条件2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少3. 递归效率不高,递 ...
- Git全面教程
Git全面教程 简介 Git分布式版本管理系统. Linus在1991年创建了开源的Linux,但是一直没有一个合适的版本管理工具,在2002年以前,世界各地的志愿者都是通过把源代码文件通过diff的 ...
- LibreOJ 6281 数列分块入门 5(分块区间开方区间求和)
题解:区间开方emmm,这马上让我想起了当时写线段树的时候,很显然,对于一个在2^31次方以内的数,开方7-8次就差不多变成一了,所以我们对于每次开方,如果块中的所有数都为一了,那么开方也没有必要了. ...
- Codeforces 12D Ball(线段树)
N ladies attend the ball in the King's palace. Every lady can be described with three values: beauty ...