SpringAop的简单实现

Stella981
• 阅读 470

AOP当中的概念:

  • 1、切入点(Pointcut):在哪些类,哪些方法上切入(where);
  • 2、增强(Advice): 早期翻译为通知,在方法执行的什么时机(when:方法前/方法后/方法前后)做什么(what:增强的功能);
  • 3、切面(Aspect): 切面=切入点+增强,通俗点就是:在什么时机,什么地点,做什么增强!
  • 4、织入(Weaving): 把切面加入到对象,并创建出代理对象的过程。(该过程由Spring来完成)。

开启AOP

SpringMvc 开启方式

SpringBoot 开启方式

  • 1、引入依赖

    org.springframework.boot spring-boot-starter-aop
  • 2、在application.properties中加入配置
    spring.aop.auto=true

SpringBoot 简单实践

1、切面

@Component//让spring管理该bean
@Aspect//切面
public class AOPTest {
    /*
     *切点
     */
    @Pointcut("execution(* com.kismet.p2p.mgrsite.controller.AOPController.test(..))")
    public void aop(){}

    @Around("aop()")//增强以around增强为例
    public Object around(ProceedingJoinPoint point){
        Object result = null;
        try {
            System.out.println("AOP开始了");
       /*
         * 执行被切点中的方法
         * result接受到的方法放回值,该例子中即为"lalaalal"
         */
            result = point.proceed();
            System.out.println("AOP结束了");
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return  result;
    }
}

说明:

  • 1、execution(<修饰符>? <返回类型> <声明类型>? <方法名>(<参数>) <异常>?) ?表示可选参数
  • 2、支持*匹配规则
  • 3、其中带问号的为选填.例如上述切点表达式的意思为:
    (* com.kismet.p2p.mgrsite.controller.AOPController.test(..)) 方法com.kismet.p2p.mgrsite.controller.AOPController.test方法的所有返回类型,所有参数类型,作为切点.

2、被切点

package com.kismet.p2p.mgrsite.controller;
@Controller
public class AOPController {
    @RequestMapping("test")
    public String test(){//该方法的引用即为上述切面中的切点
        System.out.println("被测试");
        return "lalaalal";
    }
}

3、运行方法test结果

AOP开始了
被测试
lalaalal
AOP结束了

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
javaWeb
<fontsize5style"lineheight:32px;letterspacing:1px;"<fontcolorred一</font:拦截器:是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,springmvc的aop中的前置通知和后置通知。
Stella981 Stella981
2年前
Spring AOP @Aspect 基本用法
Spring使用的AOP注解分为三个层次:前提条件是在xml中放开了<aop:aspectjautoproxyproxytargetclass"true"/<!开启切面编程功能1、@Aspect放在类头上,把这个类作为一个切面。2、@Pointcut放在方法头上,定义一个可被别的方法引用的切入点
Stella981 Stella981
2年前
SpringAOP
Aspect切面:一个关注点的模块化,这个关注点可能会横切多个对象Joinpoint连接点:程序执行过程中的某个特定的点Advice通知:在切面的某个连接点上执行的动作Pointcut切入点:匹配连接点的断言,在AOP的通知和一个切入点表达式关联Introduction引入:在不修改类代码的前提下,为类添加新的方法
Wesley13 Wesley13
2年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Easter79 Easter79
2年前
Spring的AOP的注解的通知类型,切入点的注解
Spring的注解的AOP的通知类型@Before:前置通知@AfterReturning:后置通知@Around:环绕通知@AfterThrowing:异常抛出通知@After:最终通知@Pointcut:切入点的注解1/
Easter79 Easter79
2年前
Spring中的AOP(七)——基于XML配置文件方式的AOP
  除了前面介绍的基于JDK1.5的注解方式来定义切面,切入点和增强处理外,SpringAOP也允许直接使用XML配置文件来管理它们。在JDK1.5之前,只能使用配置文件的方式来管理,在Spring2.X后提供了一个新的aop命名空间来定义切面、切入点和增强处理。相比之下,使用XML配置文件方式有如下优点:如果没有使用JDK1.5以上
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
2年前
Spring的Aop调用当前类的两种方法
我们知道Spring对于AOP实现有两种方法,如果类是接口实现类,则采用JDK动态代理实现AOP。如果类没有实现接口,则采用cglib生成子类做增强,以实现代理类的目的,其实运行时找到的是这个代理类,而不是原类。所以在一个代理类中调用内部的方法,是不是再走AOP逻辑的,那有什么好的方法可以解决这种问题吗?基于上面的思路有两种解决办法方法一:直接从
Wesley13 Wesley13
2年前
AOP的基本术语
通知、增强(Advice)通知就是你想要的功能,在特定的连接点,AOP框架执行的动作。Spring切面可以应用5种类型的通知:前置通知(Before):在目标方法被调用之前调用通知功能;后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;返回通知(Afterreturni