SpringAop的简单实现

AOP当中的概念:

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

开启AOP

SpringMvc 开启方式

  • 1、引入依赖
<dependency>
  <groupId>org.aspectjgroupId>
  <artifactId>aspectjweaverartifactId>
  <version>1.8.7version>
dependency>
  • 2、在spring配置文件中加入

<aop:aspectj-autoproxy/>

SpringBoot 开启方式

  • 1、引入依赖
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-aopartifactId>
dependency>
  • 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结束了

你可能感兴趣的:(SpringAop的简单实现)