spring 学习路线梳理(三)AOP

1 概念

   在不修改原有业务的情况下,对业务做一些增强处理

 1.1连接点

   自己实现的业务逻辑。例如:在dao里面的 update,delete,select

 1.2切入点

   在哪些方法里面做增强。例如:在update 里面做增强,update就是切入点

 1.3通知:定义通知

    通知类:定义一个类为切面类

    通知方法:需要在那个方法里面做增强

 1.4 切面

     将需要增强的功能方法 和 切入点绑定到一起 就是切面

     在练习里面会加深理解

练习

  1.1引入依赖
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>
1.2 定义接口和实现类

      需求描述:在每个实现方法执行前打印当前的系统时间

     连接点和切入点的理解: 在接口里面定义的方法是连接点,需要在哪些方法里面增强功能是切入点

public interface ILoginService {
     String login();

    void update();

    boolean delete();
    
}


//定义实现类
@Slf4j
@Service
public class LoginServiceImpl implements ILoginService {

    @Autowired
    @Qualifier("ILoginDao2")
    public ILoginDao iLoginDao;

    @Value("${name}")
    public String name;

    @Override
    public String login() {
        log.info("{}","login validator send service :" + name);
        iLoginDao.login();
        return "login success !!!";
    }

    @Override
    public void update() {
        System.out.println(System.currentTimeMillis());
        log.info("{}","update service");
    }

    @Override
    public boolean delete() {
        log.info("{}","delete service");
        return false;
    }


}
    1.3 定义通知类,执行通知的方法(在指定的每个方法中执行的共性逻辑)

      @Component 将通知类交由spirng来管理

      @Aspect 将此类定义为切面类

       通知方法: 这个类是里面的方法是通知方法(就是在哪些切入点需要执行的方法)

@Component
@Aspect
public class MyAOP {

    public void method(){}
}
1.4 定义切入点

   在哪些方法中执行共性业务和增强逻辑用@Before 做绑定

   将需要增强的功能方法下面是 【 aop() 方法】 和 【 通知方法 method()  方法 】 上面定义的【 切入点 update() 方法 】绑定到一起 就是切面

@Component
@Aspect
public class MyAOP {

    @Pointcut("execution(void com.drawing.springsecuritydemo.service.ILoginService.update())")
   private void method(){}

    @Before("method()")
    public void aop(){
        System.out.println(System.currentTimeMillis());
    }
}

1.5 开启 spring对aop的支持

   

aop 工作流程

aop切入点表达式

1.1切入点表达式标准格式:动作关键字 (访问修饰符 返回值类型  包名.类/接口.方法名(参数) 异常类型)

@Pointcut("execution(void com.drawing.springsecuritydemo.service.ILoginService.update())")

简化配置

    可以使用通配符描述切入点,快速描述

     *:单个独立的任意符号,可以独立出现,也可以作为前戳或者后戳的匹配符出现

@Pointcut("execution(* com.drawing.springsecuritydemo.service.ILoginService.*())")

    ..:多个连续的任意符号,可以独立出现,常用于简化包名与参数的书写

@Pointcut("execution(* com.drawing.springsecuritydemo..*())")

aop 通知类型

之前通知    :@Before("method()")

之后通知    : @After("method()")

环绕通知(重点):@Around("method()")

返回后通知(了解) : @AfterReturning("method()")

异常后通知(了解):  @AfterThrowing("method()")

例子1:前后添加通知

执行

前后通知打印的效果

例子2:环绕通知 和前后通知效果一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值