为什么将Spring配置bean变成另一个类名以$$ EnhancerBySpringCGLIB结尾的bean

时间:2019-09-21 07:01:01

标签: spring spring-boot

我已经在我的spring-boot项目中定义了一个spring bean配置类,如下所示:

@Configuration
public class GgjSsoPropsConfig {}

但是在spring-boot应用程序启动之后,我尝试评估此配置bean的类名,然后得到:

// System.out.print(this.getClass().getSimpleName())
GgjSsoPropsConfig$$EnhancerBySpringCGLIB$$788ad0f1

好像我的豆子变成了另一个“代理豆子”?
顺便说一下,我从未在项目中启用任何AOP功能。

2 个答案:

答案 0 :(得分:0)

是的。 Spring AOP使用CGLIB(在这种情况下)或动态代理来创建bean实例并将其添加到应用程序上下文中。

https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch08s06.html

答案 1 :(得分:0)

答案是肯定的,我在此bean post处理方法中找到了答案:
   1

这是此方法的官方评论:

  

对BeanFactory进行后处理以搜索配置类BeanDefinitions;
  然后,通过{@link ConfigurationClassEnhancer}增强所有候选人。

实际上,这个新生成的增强器bean只是我原始配置类org.springframework.context.annotation.ConfigurationClassPostProcessor#enhanceConfigurationClasses的子类,它继承了父类的所有方法和字段,并在Spring的基础上添加了一些额外的增强器功能。