• 【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)

    在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段

  • 相关阅读:
    树莓派debian配置lamp[解决Apache不显示php网页]
    centos7 mysql数据库安装和配置
    Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置
    Linux从git上下东西
    在Debian/Ubuntu上面安装升级nginx到最新版
    今天做一个项目的时候,要在一个编辑的jsp页面的textarea标签设置value属性,结果发现他没有value属性,但是是编辑页面又必须要回显要修改的内容,所以在参考了w3cschool之后很轻松的解决了这个问题。
    JavaScript 弹出框:警告(alert)、确认(confirm)的简单写法
    sql 语句实现可用户名、邮箱、手机号登录系统
    留言功能问题
    手机访问pc版网站自动跳转为手机版页面
  • 原文地址:https://www.cnblogs.com/lodor/p/7716325.html
Copyright © 2020-2023  润新知