我有一个SpringBoot
应用程序,它使用@Component
注释创建bean而不是旧的基于XML的applicationContext
文件。
我需要使用一个使用基于XML的bean的库。我需要在我的应用程序中初始化并提供这些bean,否则我最终会重写相当多的代码。
我已经尝试使用@ComponentScan来找到它们,因为这些类没有用@Component注释,因此预期不起作用。我尝试过使用@ImportResource,如here所述,但没有运气。
所以问题是,如何在jar依赖项中实例化bean,这些bean是以XML样式定义的,而我的应用程序不使用XML applicationContext
文件,然后在我的应用程序中使用它们?
注意:
我需要导入的库很老,并且使用组件注释的机会几乎为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);
}
}
我认为你应该使用ClassPathXmlApplicationContext将JAR文件中存在的类作为Spring bean加载。您可能需要正确地训练bean的依赖关系并将它们作为属性添加到主bean。否则,您可能会遇到一些运行时异常。
示例代码: -
ApplicationContext context
= new ClassPathXmlApplicationContext(
"classpathxmlapplicationcontext-example.xml");
BeanClassName bean = context.getBean("beanName", BeanClassName.class);
您可以告诉Spring Boot组件扫描直接在其包中查找这些JAR,如下所示:
@ComponentScan(basePackages = {"org.thirdparty.thirdpartyjar"})
This是一个问题/答案我相信与你的相似。