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.输出结果

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章