基于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配置的更多相关文章

  1. spring 注解 之 AOP基于@Aspect的AOP配置

    Spring AOP面向切面编程,可以用来配置事务.做日志.权限验证.在用户请求时做一些处理等等.用@Aspect做一个切面,就可以直接实现. 1.首先定义一个切面类,加上@Component  @A ...

  2. spring aop 基于schema的aop

    AOP的基本概念: 连接点(Jointpoint):表示需要在程序中插入横切关注点的扩展点,连接点可能是类初始化.方法执行.方法调用.字段调用或处理异常等等,Spring只支持方法执行连接点,在AOP ...

  3. 【Spring】基于@Aspect的AOP配置

    Spring AOP面向切面编程,可以用来配置事务.做日志.权限验证.在用户请求时做一些处理等等.用@Aspect做一个切面,就可以直接实现. ·   本例演示一个基于@Aspect的小demo 1. ...

  4. 基于@Aspect的AOP配置

    1. Spring 除了支持Schema 方式配置 AOP,还支持注解方式:使用 @Aspect 来配置 2. Spring 默认不支持 @Aspect 风格的切面声明,通过如下配置开启@Aspect ...

  5. spring-第十七篇之spring AOP基于注解的零配置方式

    1.基于注解的零配置方式 Aspect允许使用注解定义切面.切入点和增强处理,spring框架可以识别并根据这些注解来生成AOP代理.spring只是用了和AspectJ 5一样的注解,但并没有使用A ...

  6. 第三章 AOP 基于Schema的AOP

    基于Schema定义的切面和前现两种方式定义的切面,内容上都差不多,只是表现形式不一样而已. 3.7.1一般增强的使用 a.目标类 public class Target { public void ...

  7. 基于aspect实现AOP——xml配置的其他操作

    将上方配置中的前置通知,可换成环绕通知

  8. Spring AOP基于注解的“零配置”方式实现

    为了在Spring中启动@AspectJ支持,需要在类加载路径下新增两个AspectJ库:aspectjweaver.jar和aspectjrt.jar.除此之外,Spring AOP还需要依赖一个a ...

  9. 第三章 AOP 基于@AspectJ的AOP

    在前面,我们分别使用Pointcut.Advice.Advisor接口来描述切点.增强.切面.而现在我们使用@AdpectJ注解来描述. 在下面的例子中,我们是使用Spring自动扫描和管理Bean. ...

随机推荐

  1. 使用Selenium登录新浪微博

    为了总结一下Selenium的用法,具体用了这个例子来说明一下. Selenium简单来说,就是通过程序驱动一个浏览器,并且可以通过程序来帮你做一些事情,例如点击.填表呀之类的. 换句话说,你在浏览器 ...

  2. krpano之语音介绍

    语音介绍:在每进入一个场景时,播放一段该场景的语音介绍. 制作步骤: 1.定义全局事件.在关闭场景时执行stopsounds(),在打开新场景时执行automusic(). <events on ...

  3. webapi help文档 添加测试功能

    在做webapi项目的时候 webapi为我们提供了help文档,开发者可以参考这个文档,但是这个文档缺少测试功能,如果加上一个测试的功能就更加方便了 于是就研究了下写了一段代码,代码比较简单,只要将 ...

  4. python数据字典的操作

    一.什么是字典? 字典是Python语言中唯一的映射类型. 映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表. 字典对象是可变的,它是一个容器 ...

  5. SELINUX配置

    今天试着将centos7的ssh默认端口改成1234,但改了后,SSHD服务竟然启动不了了.后来关了selinux测试,果然可以了.但这是运行环境,不能关,所以不得不配置semanage! 一.安装s ...

  6. 深入剖析SolrCloud(一)

    作者:洞庭散人 出处:http://phinecos.cnblogs.com/ 本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由 ...

  7. Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)

    UsernamePasswordToken token = new UsernamePasswordToken(loginForm.getUsername(),loginForm.getPasswor ...

  8. volatile和 锁的区别

    Volatile: 当把变量声明为volatile类型后,编译器和运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其它内存操作一起重排序.volatile变量不会被缓存在寄存器或者对其他处 ...

  9. 关于sleep的理解

    unix是按时间片轮转调度, windows是抢占式调度 以吃蛋糕为例子,10个人吃蛋糕,如果是unix下, 假设开始时,每个人都处于就绪状态,那么操作系统调度大家排好队,按顺序吃,每个人吃1分钟, ...

  10. Linux查看内存,负载状态

    Linux查看内存,负载状态 查看内存使用情况  www.ahlinux.com cat /proc/meminfo MemTotal:       16332644 kB MemFree:     ...