当前位置: 首页 > 网络应用技术

AOP是Spring Boot中的AOP,JDK Dynamic代理还是CGLIB动态代理?

时间:2023-03-06 19:15:46 网络应用技术

  每个人都知道AOP的底层是动态代理,有两种方法可以在Java中实现动态代理:

  两者之间的最大区别是,基于JDK的动态代理需要需要代理的接口,并且基于CGLIB的动态代理不需要由代理对象解释。

  然后,小朋友不禁要问,春季的AOP是如何意识到的?是基于JDK的动态代理还是基于CGLIB的动态代理?

  首先,春季的动态代理,什么样的用途和情况:

  让我们从官方文件中看一下此会议:

  可以看出,即使在最新版本的春季版本中,上述策略仍然相同。也就是说,将JDK用作动态代理,使用JDK。您不能将JDK用作使用CGLIB的动态代理,即JDK的首选作为动态代理。

  Spring Boot和Spring处于相同的脉冲中,因此在动态代理问题上是相同的策略吗?对不起,这确实不同。

  Spring Boot中此问题的处理将Spring Boot 2.0作为节点,该节点在之前和之后都不同。

  在Spring Boot2.0之前,AOP的自动配置代码如下(Spring Boot):

  可以看出,这种自动配置主要是讨论application.properties配置文件中属性的值。

  具体作用是注释。关于此注释的属性,我也说了一点:

  基于上述简介,我们可以轻松地看到:

  这是Spring Boot 2.00之前的情况。

  让我们看一下Spring Boot 2.0之后的情况(包括):Spring Boot:

  可以看出,大多数配置都是相同的,并且有一个不同的位置,也就是说,匹配属性的值。可以看到,如果用户没有配置,则从Spring Boot2.0开始,那么默认情况下使用CGLIB代理。

  最后,我们写了一个简单的例子来验证我们的想法。

  首先创建一个Spring Boot项目(此情况使用最新版本的Spring Boot,即使用CGLIB代理默认情况下),添加三个依赖项,如下:

  接下来,我们创建一个IuserService界面,如下:

  然后,让我们创建一个接口的实现类:

  该方法无需实施。

  另一个简单的切面表面:

  最后,另一种简单的测试方法是注入IuserService的实例:

  DBUEG运行,您可以看到IuserService由CGLIB代表。

  如果我们要使用JDK进行代理,我们只需要在应用程序中添加以下配置。

  添加完成后,请重新删除,如下所示:

  可以看出,已经使用了JDK动态代理。

  如果您使用Spring Boot 1.5.22.Release的版本,那么即使您没有在应用程序中添加配置。我不会测试。朋友可以自己尝试。

  综上所述:

  只是这个。