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

    技术2026-02-27  8

    文章目录

    CGLIB的动态代理1.在src/main下创建Java源文件,创建包com.aop.demo22.在pom.xml内引入依赖3.创建Product类4.创建SpringDemo2测试类5.创建MyCglibProxy类实现CGLIB动态代理6.输出结果

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

    Processed: 0.015, SQL: 9