【问题标题】:Using Dependency XML Beans in SpringBoot Components在 Spring Boot 组件中使用依赖 XML Bean
【发布时间】:2018-08-23 02:18:19
【问题描述】:

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

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

我尝试使用@ComponentScan 来查找它们,但正如预期的那样不起作用,因为类没有使用@Component 进行注释。 我尝试过使用@ImportResource,如here 所述,但没有运气。

所以问题是,如何在我的应用程序不使用 XML applicationContext 文件的情况下实例化 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);
    }
}

【问题讨论】:

标签: java spring spring-boot


【解决方案1】:

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

示例代码:-

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

BeanClassName bean = context.getBean("beanName", BeanClassName.class);

【讨论】:

  • +1 这确实有效,但正如您所提到的,没有找到这些属性,这样下去会做很多工作。因此,我不会接受它作为答案,以防万一有人提到更好的解决方案。
【解决方案2】:

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

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

This 是我认为与您的问题/答案相似的问题/答案。

【讨论】:

  • 正如我在问题中提到的,我已经尝试过了,但它不起作用,因为库类没有用 @Component 注释,所以它们不会被发现。
  • 那么除了声明他们的应用程序上下文 XML 并从中获取 bean 之外,可能没有其他选择。是的,我的错,一开始没有仔细阅读你的问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 2017-04-25
  • 2020-10-02
  • 2020-09-10
  • 2019-04-26
  • 2018-06-21
  • 2019-02-26
相关资源
最近更新 更多