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

普通Spring项目无主类场景下jar包插件类的依赖注入实现方案咨询

可行解决方案

方案1:直接从Spring上下文获取A类Bean(最推荐)

既然是普通Spring应用,运行时必然存在已初始化的ApplicationContext实例,按以下步骤操作即可:

  • 新增一个Spring配置类,通过注解把jar包中的A类注册为Spring Bean:
@Configuration
@ComponentScan(basePackages = "A类所在的jar包包名") // 会自动扫描A、B、C类并注册为Bean
public class JarBeanConfig {
}

如果不想扫描全量包,也可以手动定义A的Bean:

@Configuration
public class JarBeanConfig {
    @Bean
    public A a() {
        return new A();
    }
    // 若B、C也在jar包未被扫描到,同理添加B、C的@Bean定义即可
}
  • 在被插件调用的D类中,实现ApplicationContextAware接口拿到Spring上下文,直接调用getBean方法获取已经完成注入的A实例:
public class D implements ApplicationContextAware {
    private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    // 你需要使用A的业务方法
    public void yourBusinessMethod() {
        A a = applicationContext.getBean(A.class);
        // 直接使用a即可,b、c属性已经被Spring自动注入完成
    }
}

如果项目是XML配置的Spring项目,直接在XML中添加A、B、C的<bean>配置即可,无需写配置类。

方案2:手动装配new出来的A实例

如果你必须自己实例化A类,可通过AutowireCapableBeanFactory完成依赖注入:

  • 在D类中实现BeanFactoryAware接口拿到BeanFactory实例
  • 实例化A之后调用autowireBean方法完成注入:
public class D implements BeanFactoryAware {
    private AutowireCapableBeanFactory beanFactory;

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        this.beanFactory = (AutowireCapableBeanFactory) beanFactory;
    }

    public void yourBusinessMethod() {
        A a = new A();
        beanFactory.autowireBean(a); // Spring会自动调用setter注入b、c属性
        // 直接使用a即可
    }
}

注意事项

  • 需确保A依赖的B、C类对应的Bean已经存在于Spring上下文中,否则会抛出注入失败异常
  • 新增的配置类需要被Spring的组件扫描覆盖到,若用XML配置则需要在XML中声明配置类或Bean定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:54:02