AOP面向切面编程

spring的三大核心:控制反转、依赖注入、面向切面编程。

控制反转:对象A依赖对象B,如果收到把对象B给new出来,会使代码高度耦合,产生硬编码。为了避免这种情况,通过注解或配置XML将bean托管给spring管理。由spring进行bean实例的创建

依赖注入:当spring把对象B创建出来后,需要设置到对象A中,这一过程称为依赖注入

面向切面编程:什么是面向切面编程?在运行时,动态地将代码织入到指定类的指定方法、指定位置上的编程思想就是面向切面的编程。一般而言,我们管织入到指定类指定方法的代码片段称为切面,而织入到哪些类、哪些方法则叫切入点。对于面向切面编程这里举个实例:dao层对数据库操作时,都使用到了事务,在对数据库操作时都可能抛出异常,当抛出异常时都要做回滚操作。为避免在dao层对数据库操作时都要捕获异常做回滚,创建一个切面实现做回滚操作功能,然后指定切点,当发生异常时实现切面功能。对于切面代码块什么时候的调用,这里有做一些下列举:

AOP配置元素

描述

<aop:advisor>

定义AOP通知器

<aop:config>

顶层的AOP配置元素

<aop:pointcut>

定义切点

<aop:aspect>

定义切面

<aop:after-returning>

定义AOP after-returning通知

<aop:after-throwing>

定义after-throwing通知

<aop:after>

定义AOP后置通知

<aop:before>

定义AOP前置通知

当使用面向切面进行编程时,需要做XML文件配置声明哪些类是切面,哪些方法是切点,或者需要添加注解来做声明。做XML配置不再举例,这里以注解方式来说明一下面向切面的编程

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class SleepHelper {

    public SleepHelper(){
    }
    
    @Pointcut("execution(* *.sleep())")(切点)
    public void sleeppoint(){}
    
    @Before("sleeppoint()")
    public void beforeSleep(){
        System.out.println("睡觉前要脱衣服!");
    }
    
    @AfterReturning("sleeppoint()")
    public void afterSleep(){
        System.out.println("睡醒了要穿衣服!");
    }
    
}

@Aspect 的注解来标识切面 , 注意不要把它漏了,否则 Spring 创建代理的时候会找不到它 ,@Pointcut 注解指定了切点, @Before @AfterReturning 指定了运行时的通知,注

意的是要在注解中传入切点的名称






















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值