2021-08-18

CGLIB

CGLib (Code Generation Library) 是一个强大的、高性能、高质量的 Code 生成类库。它可以在运行期扩展 Java 类与实现 Java 接口。CGLib 比 Java 的 java.lang.reflect.Proxy 类更强的在于它不仅可以接管接口类的方法,还可以接管普通类的方法。

1. 创建springboot项目
2. 导入相关依赖(AOP需要的jar包)

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

3. 创建实体类
在这里插入图片描述
4)创建一个测试类

@SpringBootTest
public class TestBook {
    @Autowired
    private Book book;
    @Test
    public void testBook(){
        //使用CGLIB代理为Book类的方法进行增强
        //CGLIB代理的原理,创建被代理类的子类,因为子类拥有父类的所有方法,
        // 然后进行增强
        // 创建增强器(对象)
        Enhancer enhancer = new Enhancer();
        //指定给哪个类增强
        enhancer.setSuperclass(book.getClass());
//        enhancer.setInterfaces();//此方法用于有接口的类
        //指定增强方法
        enhancer.setCallback(new MethodInterceptor() {
            @Override
            public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
                if("look".equals(method.getName())) {
                    System.out.println("增强代码开始");
                    book.look();
                    System.out.println("增强代码结束");
                } else if("study".equals(method.getName())) {
                    System.out.println("增强代码开始");
                    book.study();
                    System.out.println("增强代码结束");
                }
                return null;
            }
        });
        //创建CGLIB代理
        Book b = (Book) enhancer.create();
        b.look();
        b.study();
    }
}

5) 测试观察结果
在这里插入图片描述

AOP

**AOP=Aspect Oriented Programming(面向切面编程),**简单理解:在不影响源代码的基础上对代码进行增强

AOP的相关概念

  1. 连接点(Joint point)表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。
    简单理解:就是方法的调用就称为连接点
  2. 切入点(Pointcut)表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
    简单理解:符合某种规则的连接点
    连接点包含切入点,切入点一定是连接点,连接点不一定是切入点
  3. 通知Advice:Advice 定义了在 pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。
    简单理解:advice是增强的方法
  4. 切面(Aspect)Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。
    简单理解:狭义上的切面:一个类包含了增强的方法,和指定的规则
    广义上的切面=连接点+切入点+通知
  5. 目标对象(target object):被增强的对象
  6. 织入(weaving):通过动态代理增强指定的方法

如何实现AOP

1) 在pojo中创建A类
在这里插入图片描述
2)创建B类
在这里插入图片描述
3)导入aop依赖
在这里插入图片描述
4)创建切面类,cn.tedu.aspect,创建FirstAspect类
在这里插入图片描述
5)创建TestController进行测试
在这里插入图片描述
6)观察结果
在这里插入图片描述
在这里插入图片描述
串讲总结:今天老师讲的有点晚,笔记就粘贴老师的了,总体一直跟上了老师的节奏,理解上还有很多欠缺,希望能有时间做复习和巩固

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值