Spring AOP

AOP概念AOP的动态代理技术spring的AOP相关概念(词汇)AOP开发的三步曲XML的AOP开发切点表达式通知的类型切点表达式的抽取植入的配置注解的AOP配置开发的步骤概念Aspect Oriented Programming 面向切面编程预编译,运行期间,动态代理技术,解耦AOP的动态代理技术JDK代理:接口cglib:父类spring的AOP是对JDK代理和cg...
摘要由CSDN通过智能技术生成

概念

  • Aspect Oriented Programming 面向切面编程
  • 预编译,运行期间,动态代理技术,解耦

AOP的动态代理技术

  • JDK代理:接口
  • cglib:父类

spring的AOP

  • 是对JDK代理和cglib代理的封装
  • jdk代理是原生的,速度快,但是需要接口的支持
  • cglib是第三方的,不需要接口

相关概念(词汇)

  • Target 目标对象,承载了连接点
  • Proxy 代理对象,承载了通知(增强方法)
  • joinpoint 可以被增强的方法
  • pointcut 被增强的方法
  • advice 通知/增强 ,增强方法的逻辑
  • aspect 切面 (切点+增强/通知)
  • weaving 织入 切点和通知结合的过程

AOP开发的三步曲

  • 目标方法 目标对象
  • 增强方法 代理对象
  • 配置结合
Spring 框架监控切入点方法的执行。一旦监控到切入点方法被运行,使用代理机制,动态创建目标对象的代理对象,根据通知类别,在代理对象的对应位置,将通知对应的功能织入,完成完整的代码逻辑运行。

XML的AOP开发

  • 导入AOP 坐标 context, aspectjweaver
  • 目标类和目标接口
  • 切面类(有增强方法)
  • 目标对象和切面对象放入spring容器中
  • appllicationContext.xml中配置织入关系
  • 测试

切点表达式

  • execution([修饰符] 返回值类型 包名.类名 .方法名(参数))
  • 修饰符可以省略
  • 返回值类型、包名、类名、方法名可以使用星号* 代表任意
  • 包名与类名之间两个点 … 表示当前包及其子包下的类
  • 参数列表可以使用两个点 … 表示任意个数,任意类型的参数列表

通知的类型

  • aop:before
  • aop:after-returning
  • aop:around
  • aop:throwing
  • aop:after

切点表达式的抽取

```java

 <aop:pointcut id="myPointcut" expression="execution(* com.itheima.aop.*.*(..))"/>
  pointcut-ref="myPointcut"

@Pointcut("execution(* com.itheima.anno.*.*(..))")
    public void pointcut(){}

```

植入的配置

<aop:config>
    <aop:aspect ref=“切面类”>
        <aop:before method=“通知方法名称” pointcut=“切点表达式"></aop:before>
    </aop:aspect>
</aop:config>

注解的AOP配置

开发的步骤

  • 创建目标类和目标接口

  • 创建切面类

  • 将目标和切面对象放入spring容器中

  • 注解配置植入关系

  • 配置文件中开启扫描和AOP的自动代理

  • 测试

  • 动态代理的实现过程

public interface TargetInterface {
   
    public void method();
}

public class Target implements TargetInterface {
   
    @Override
    public void method() {
   
        System.out.println("i`m target method ...");
    }
}

public class ProxyDemo {
   
    public static void main(String[] args) {
   
        final Target target = new Target();
        TargetInterface proxy = (TargetInterface)Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值