You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring如何通过普通类实现"lite" bean模式?

普通无注解类中Spring Lite @Bean模式的实现方式

Spring文档中提到的Lite @Bean模式包含“在无@Configuration/@Component注解的普通类中声明@Bean”的场景,但这类@Bean无法通过@ComponentScan自动被Spring识别,必须通过手动将该普通类注册到Spring容器中,才能触发对其中@Bean方法的处理。以下是具体实现方案:

一、通过@Import导入普通类

这是最简洁的实现方式,只需将包含@Bean方法的普通类通过@Import注解导入到任意@Configuration类中,Spring会自动注册该普通类的实例,并处理其中的@Bean方法。

代码示例

// 普通无注解类,包含@Bean方法
public class LiteBeanProvider {
    @Bean
    public UserService userService() {
        return new UserService();
    }

    @Bean
    public OrderService orderService() {
        return new OrderService();
    }
}
// 配置类,导入普通类
@Configuration
@Import(LiteBeanProvider.class)
public class AppConfig {
    // 无需额外配置,Spring自动处理LiteBeanProvider中的@Bean方法
}

注册完成后,LiteBeanProvider本身会成为Spring容器管理的bean,其内部定义的userService和orderService也会被注册为容器bean,且处于Lite模式。

二、手动注册BeanDefinition

通过实现BeanDefinitionRegistryPostProcessor接口,手动向Spring容器注册普通类的BeanDefinition,Spring后续会创建该类实例并处理其中的@Bean方法。

代码示例

// 自定义Bean注册处理器
public class CustomBeanRegistrar implements BeanDefinitionRegistryPostProcessor {
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        // 构建普通类的BeanDefinition
        GenericBeanDefinition beanDef = new GenericBeanDefinition();
        beanDef.setBeanClass(LiteBeanProvider.class);
        // 将BeanDefinition注册到容器
        registry.registerBeanDefinition("liteBeanProvider", beanDef);
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        // 无需额外操作
    }
}
// 在配置类中注册自定义处理器
@Configuration
public class AppConfig {
    @Bean
    public CustomBeanRegistrar customBeanRegistrar() {
        return new CustomBeanRegistrar();
    }
}

Lite模式的核心特性

与Full @Configuration模式的核心区别在于:

  • Lite模式下的@Bean方法不会被CGLIB代理,同一类中@Bean方法互相调用时,会直接执行方法创建新实例,而非从Spring容器中获取已注册的bean
  • 普通类仅作为@Bean方法的载体,不会被Spring代理增强

内容的提问来源于stack exchange,提问作者Manuel Jordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:35:16