当前位置: 首页 > 知识库问答 >
问题:

在SpringBoot组件中使用依赖XML bean

丁弘新
2023-03-14

我有一个SpringBoot应用程序,它使用@Component注释来创建bean,而不是旧的基于XML的applicationContext文件。

我需要使用一个使用基于XML的bean的库。我需要这些bean在我的应用程序中初始化并可用,否则我最终会重写相当多的代码。

我已经尝试使用@ComponentScan来查找它们,但正如预期的那样,由于类没有用@Component注释,因此无法找到它们。我尝试过使用@ImportResource,如这里所述,但没有成功。

所以问题是,当我的应用程序不使用XMLapplicationContext文件时,如何在jar依赖项中实例化bean(这些bean是以XML样式定义的),然后在我的应用程序中使用它们?

注:

我需要导入的库非常旧,让它使用组件注释的可能性几乎为0。无论我改变什么,都必须在我的项目中。

我知道开始使用applicationContexts可能会奏效,但我真的不想使用基于XML的bean。

下面是SpringBootApplication类,以防它可能有用:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyApp extends SpringBootServletInitializer {
    public static void main(final String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}

共有2个答案

鱼旺
2023-03-14

您可以让Spring Boot组件扫描直接在其包中查找这些JAR,如下所示:

@ComponentScan(basePackages = {"org.thirdparty.thirdpartyjar"})

我相信这个问题/答案与你的类似。

戈博易
2023-03-14

我认为应该使用ClassPathXmlApplicationContext将JAR文件中的类作为Springbean加载。您可能需要正确地计算bean的依赖项,并将它们作为属性添加到主bean中。否则,可能会出现一些运行时异常。

示例代码:-

ApplicationContext context 
      = new ClassPathXmlApplicationContext(
        "classpathxmlapplicationcontext-example.xml");

BeanClassName bean = context.getBean("beanName", BeanClassName.class);
 类似资料:
  • 我有一个控制器 服务接口 我想在我的控制器中使用@autowired来使用该服务,但当我运行应用程序时,我得到以下错误 org.springframework.beans.factory.beanCreationException:创建名为“demo application”的bean时出错:注入autowired依赖项失败;嵌套异常为org.SpringFramework.Beans.Facto

  • 我有以下类 : 我想按如下方式使用它: 因此,通过扩展已经注入依赖项的超类,我希望在其子类中访问它。 我尝试了许多不同的方法,甚至将超类作为组件: 但是,<code>仍然是这样。fetchApi为,即使在超类中也是如此。

  • Apache ShardingSphere 在数据库治理模块使用 SPI 方式载入数据到配置中心和注册中心,进行实例熔断和数据库禁用。 目前,Apache ShardingSphere 内部支持 ZooKeeper,Etcd等常用的配置中心/注册中心。 此外,开发者可以使用其他第三方组件,并通过 SPI 的方式注入到 Apache ShardingSphere,从而使用该配置中心和注册中心,实现数

  • 问题内容: 我在理解以下代码为何不起作用时遇到问题。 我有以下项目结构: 哪里 和 哪里 我将所有内容初始化为: 一旦编译发生,我得到以下错误: 错误:(11,1)错误:com.test.CComponent(未作用域)可能未引用作用域绑定:@Provides @Singleton com.test.XXX com.test.CCModule.provideXXX() 我的目标是让一个组件从其他组

  • SOFARPC 使用了一些三方开源组件,他们分别是: 一些主要依赖: Netty under Apache License 2.0 SLF4j under the MIT License SOFA Bolt under Apache License 2.0 Javassist under Apache License 2.0 Resteasy under Apache License 2.0 SO

  • # 服务和组件 组件(components), 服务(services) 和依赖(dependencies): 和其他技术一样, Windsor 有一些基础概念你需要理解以便正确的使用它。不要害怕 - 他们可能有吓人复杂的名称和抽象的定义,但是掌握他们十分简单。 服务 :information_source: Windsor中的服务 和 WCF 服务: 术语服务(service)的使用十分泛滥,