使用 SpringApplication 时加载 applicationcontext.xml
Posted
技术标签:
【中文标题】使用 SpringApplication 时加载 applicationcontext.xml【英文标题】:Loading applicationcontext.xml when using SpringApplication 【发布时间】:2015-03-20 18:38:42 【问题描述】:谁能提供一个加载 applicationContext.xml 文件的 SpringApplication 示例?
我正在尝试使用 Spring's Example(基于 Gradle)将我的 GWT RPC 应用程序移动到 RESTful Web 服务。我有一个 applicationContext.xml 但我看不到如何让 SpringApplication 加载它。通过手动加载
ApplicationContext context = new ClassPathXmlApplicationContext(args);
导致一个空的上下文。 ...即使这样有效,它也会与返回的那个分开
SpringApplication.run(Application.class, args);
或者有没有办法让外部 bean 进入 SpringApplication.run 创建的应用上下文?
【问题讨论】:
【参考方案1】:如果您想使用类路径中的文件,您可以随时这样做:
@SpringBootApplication
@ImportResource("classpath:applicationContext.xml")
public class ExampleApplication
public static void main(String[] args) throws Exception
SpringApplication.run(ExampleApplication.class, args);
注意@ImportResource
注释中的classpath
字符串。
【讨论】:
【参考方案2】:您可以使用@ImportResource
将 XML 配置文件导入您的 Spring Boot 应用程序。例如:
@SpringBootApplication
@ImportResource("applicationContext.xml")
public class ExampleApplication
public static void main(String[] args) throws Exception
SpringApplication.run(ExampleApplication.class, args);
【讨论】:
【参考方案3】:注解不必是(在类上)那个(有主方法)那个(有下面的调用):
SpringApplication.run(Application.class, args);
(在你的情况下,我的意思是 @ImportResource 不必在你的班级)
公共类 ExampleApplication
…………
你可以有不同的班级
@Configuration
@ImportResource("classpath*:applicationContext.xml")
public class XmlConfiguration
为了清楚起见
@Configuration
@ImportResource("classpath*:applicationContext.xml")
public class MyWhateverClassToProveTheImportResourceAnnotationCanBeElsewhere
以上内容在本文中有所提及
http://www.springboottutorial.com/spring-boot-java-xml-context-configuration
…………
奖金:
以防万一您可能认为“SpringApplication.run”是一个无效方法.....事实并非如此。
您也可以这样做:
public static void main(String[] args)
org.springframework.context.ConfigurableApplicationContext applicationContext = SpringApplication.run(ExampleApplication.class, args);
String[] beanNames = applicationContext.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String name : beanNames)
System.out.println(name);
这也将巧妙地引导您了解所有许多、许多、许多(我提到“许多”吗?)....spring boot 带来的依赖项。根据您所说的对象,这是一件好事(其他人为我做了所有好事)或邪恶的事情(哇,这是我无法控制的很多依赖项)。
hashtag:sometimesLookBehindTheCurtain
【讨论】:
【参考方案4】:感谢安迪,这使它非常简洁。然而,我的主要问题是让 applicationContext.xml 进入类路径。
显然,需要将文件放入 src/main/resources
才能将它们放入类路径(通过将它们放入 jar 中)。我试图设置刚刚被忽略的 CLASSPATH。在我上面的示例中,加载似乎静默失败。使用@ImportResource
导致它详细失败(这有助于我找到真正的原因)。
【讨论】:
以上是关于使用 SpringApplication 时加载 applicationcontext.xml的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot项目中SpringApplication都做了什么