扫码阅读
手机扫码阅读

@Configuration 注解的 Full 模式和 Lite 模式!

4 2024-11-27

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:@Configuration 注解的 Full 模式和 Lite 模式!
文章来源:
江南一点雨
扫码关注公众号

Spring @Configuration 注解的 Full 模式与 Lite 模式

@Configuration 注解在 Spring 中非常常用,它有两种模式:Full 模式和 Lite 模式,这两种模式影响 Spring 容器处理 Bean 的方式。

1. 概念梳理

@Bean 注解能够将方法返回值暴露给 Spring 容器,作为一种工厂方法机制。如果 @Bean 方法在没有 @Configuration 的类中,或在带有 @Component 的类中,或在普通类中声明,则使用 Lite 模式处理。Lite 模式下,@Bean 方法不会被 CGLIB 代理,不能是 final 类型,且不能互相调用。大多数情况下,在 @Configuration 标记的类中使用 @Bean 时,是 Full 模式。

2. Full 模式

Full 模式通过 CGLIB 生成配置类的代理,使得所有 @Bean 方法通过代理调用。这样,在 Full 模式下,一个 @Bean 方法中调用另一个 @Bean 方法会使用容器中的 Bean 实例,确保唯一性。由于代理的需要,@Bean 方法不能声明为 final 或 private。

3. Lite 模式

Lite 模式是一种精简模式,可以通过去除 @Configuration 注解或使用其他注解如 @Component 开启。在 Lite 模式下,@Bean 方法不会被代理,可以是 final 或 private。但是,这也意味着一个 @Bean 方法直接调用另一个可能会导致 Bean 被初始化两次。如果要确保同一个 Bean,可以通过参数注入的方式解决。另外,通过设置 @Configuration(proxyBeanMethods = false) 也可以启用 Lite 模式。

4. 小结

Lite 模式下,方法可以是 final 或 private,没有动态代理,启动速度快,但可能导致 Bean 初始化两次。Full 模式下,配置类方法被代理,不能是 final 或 private,确保 Bean 的唯一性。实际开发中,Full 模式使用得更多。

想要了解更多内容?

查看原文:@Configuration 注解的 Full 模式和 Lite 模式!
文章来源:
江南一点雨
扫码关注公众号