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

Spring XML中factory-bean配置转@Bean注解的正确实现方式

factory-bean 配置的核心含义

Spring XML中factory-bean和factory-method搭配使用时,代表当前bean不会通过直接调用类构造方法实例化,而是通过调用容器中已存在的指定bean的实例方法来生成:

  • 你这段配置里的proxyConfig bean,不会直接new ProxyConfig对象
  • Spring会先找到容器中id为proxyConfigSupport的ProxyConfigSpringXmlSupport实例
  • 调用该实例的无参create()方法,将方法的返回值作为proxyConfig bean注册到容器中

你之前写的proxyConfig实现错误点在于手动new了空的ProxyConfig对象,完全没有复用proxyConfigSupport已经配置好的属性,和原XML逻辑不等价。

对应@Bean配置的正确写法

你之前编写的proxyConfigSupport对应的@Bean方法逻辑是正确的,只需要修正proxyConfig的实现即可,正确代码如下:

@Bean(name = "proxyConfigSupport")
public ProxyConfigSpringXmlSupport proxyDataSource(ChainListener queryListener) {
    ProxyConfigSpringXmlSupport proxyConfigSpringXmlSupport = new ProxyConfigSpringXmlSupport();
    proxyConfigSpringXmlSupport.setDataSourceName("dataSourceDefaultName");
    proxyConfigSpringXmlSupport.setQueryListener(queryListener);
    return proxyConfigSpringXmlSupport;
}

@Bean(name = "proxyConfig")
public ProxyConfig proxyConfig(ProxyConfigSpringXmlSupport proxyConfigSupport) {
    // 直接调用注入的support实例的create方法,和XML factory-bean逻辑完全一致
    return proxyConfigSupport.create();
}

代码说明:

  • 方法入参ProxyConfigSpringXmlSupport proxyConfigSupport会由Spring自动注入容器中已经初始化完成的proxyConfigSupport bean,和XML中factory-bean的引用目标完全一致
  • 不需要手动创建ProxyConfig实例,create()方法内部会基于你之前设置的数据源名称、查询监听器等属性生成配置完成的ProxyConfig对象,和原XML的执行效果完全等价。

内容的提问来源于stack exchange,提问作者Hard Worker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:42:18