AOP的底层实现—之CGLIB的动态代理——(八)

CGLIB的动态代理

1.在src/main下创建Java源文件,创建包com.aop.demo2

在这里插入图片描述

2.在pom.xml内引入依赖
<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>

3.创建Product类
package com.aop.demo2;

public class Product {
    public void save() {System.out.println("保存商品···");}

    public void upsate() {
        System.out.println("修改商品···");
    }

    public void delete() {
        System.out.println("删除商品···");
    }

    public void find() {
        System.out.println("查询商品···");
    }
}

4.创建SpringDemo2测试类
package com.aop.demo2;

import org.junit.jupiter.api.Test;

public class SpringDemo2 {
    @Test
    public void demo1(){
        Product product = new Product();

        Product proxy = (Product) new MyCglibProxy(product).createProxy();

        proxy.save();
        proxy.upsate();
        proxy.delete();
        proxy.find();
    }
}

5.创建MyCglibProxy类实现CGLIB动态代理
package com.aop.demo2;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class MyCglibProxy implements MethodInterceptor {
    private  Product product;

    public MyCglibProxy(Product product) {
        this.product = product;
    }

    public Object createProxy(){
        //1.创建核心类
        Enhancer enhancer = new  Enhancer();
        //2.设置父类
        enhancer.setSuperclass(product.getClass());
        //3.设置回调
        enhancer.setCallback(this);
        //4.生成代理
        Object proxy=enhancer.create();
        return  proxy;

    }

    public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        if ("save".equals(method.getName())){
            System.out.println("权限校验");
            return methodProxy.invokeSuper(proxy,args);
        }
        return methodProxy.invokeSuper(proxy,args);
    }
}

6.输出结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值