Java 当我只指定一个xml文件时,为什么Spring Boot会加载所有xml文件?
我有一个非常基本的问题 项目中有2个Java 当我只指定一个xml文件时,为什么Spring Boot会加载所有xml文件?,java,spring,spring-boot,Java,Spring,Spring Boot,我有一个非常基本的问题 项目中有2个@SpringBootApplications: 应用程序a: package com.example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplication
@SpringBootApplication
s:
应用程序a:
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ImportResource;
/**
* Created on 2/16/16.
*/
@SpringBootApplication
@ImportResource("classpath:run-app-a-context.xml")
public class ApplicationA {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(ApplicationA.class, args);
System.out.println(context.getBean("helloA"));
System.out.println(context.getBean("helloB"));
}
}
应用程序B:
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ImportResource;
/**
* Created on 2/16/16.
*/
@SpringBootApplication
@ImportResource("classpath:run-app-b-context.xml")
public class ApplicationB {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(ApplicationB.class, args);
System.out.println(context.getBean("helloA"));
System.out.println(context.getBean("helloB"));
}
}
如您所见,ApplicationA只应导入run-app-a-context.xml
,ApplicationB只应导入run-app-b-context.xml
。然而,事实并非如此
如果我运行/gradlew bootRun
;我得到以下输出(加上强调):
./gradlew bootRun
:compileJava最新版本
:processResources是最新的
:最新课程
:findMainClass
:开机
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
::弹簧靴::(v1.3.1.版本)
2016-02-16 11:42:21.889信息47524---[main]com.example.ApplicationA:在LMC上启动应用程序,PID 47524(/Users/IdeaProjects/whyisitloadingeverything/build/classes/main start in/Users/IdeaProjects/whyisitloadingeverything)
2016-02-16 11:42:21.896信息47524---[main]com.example.ApplicationA:未设置活动配置文件,返回默认配置文件:默认
2016-02-16 11:42:21.975信息47524---[main]s.c.a.AnnotationConfigApplicationContext:刷新org.springframework.context.annotation。AnnotationConfigApplicationContext@24a35978:启动日期[2016年2月16日星期二11:42:21太平洋标准时间];上下文层次结构的根
2016-02-16 11:42:22.883信息47524---[main]o.s.b.f.xml.XmlBeanDefinitionReader:从类路径资源[run-app-b-context.xml]加载xml bean定义
2016-02-16 11:42:23.081 INFO 47524---[main]o.s.b.f.xml.XmlBeanDefinitionReader:从类路径资源[run-app-a-context.xml]加载xml bean定义
2016-02-16 11:42:23.255信息47524---[main]o.s.b.f.config.PropertiesFactoryBean:从URL加载属性文件[jar:file:/Users/.gradle/caches/modules-2/files-2.1/org.springframework.integration/spring-integration-core/4.2.4.RELEASE/4780D5C2B6807968844916402816135F0E79F166F/spring-integration-core-4.2.4.RELEASE.jar!/META-INF/spring.integration.default.properties]
2016-02-16 11:42:23.258 INFO 47524---[main]o.s.i.config.integrationRegistrator:未明确定义名为“IntegrationHeaderChannel Registry”的bean。因此,将创建默认的DefaultHeaderChannel注册表。
2016-02-16 11:42:23.451信息47524-[main]故障配置BeanFactory后处理器:未明确定义名为“errorChannel”的bean。因此,将创建默认PublishSubscribeChannel。
2016-02-16 11:42:23.470信息47524-[main]故障配置BeanFactory后处理器:未明确定义名为“taskScheduler”的bean。因此,将创建默认的ThreadPoolTaskScheduler。
2016-02-16 11:42:24.036信息47524---[main]o.s.b.f.config.PropertiesFactoryBean:从URL加载属性文件[jar:file:/Users/.gradle/caches/modules-2/files-2.1/org.springframework.integration/spring-integration-core/4.2.4.RELEASE/4780D5C2B6807968844916402816135F0E79F166F/spring-integration-core-4.2.4.RELEASE.jar!/META-INF/spring.integration.default.properties]
2016-02-16 11:42:24.100信息47524---[main]o.s.s.c.ThreadPoolTaskScheduler:正在初始化ExecutorService“taskScheduler”
2016-02-16 11:42:24.226信息47524---[main]o.s.j.e.a.注释MBeanExporter:在启动时为JMX暴露注册bean
2016-02-16 11:42:24.243信息47524---[main]o.s.c.support.DefaultLifecycle处理器:在阶段0中启动bean
2016-02-16 11:42:24.243信息47524---[main]o.s.i.endpoint.EventDrivenConsumer:添加{日志通道适配器:_org.springframework.integration.errorLogger}作为“errorChannel”通道的订户
2016-02-16 11:42:24.244信息47524---[main]o.s.i.channel.PublishSubscribeSchannel:channel'application.errorChannel'有1个订户。
2016-02-16 11:42:24.244信息47524---[main]o.s.i.endpoint.EventDrivenConsumer:started\u org.springframework.integration.errorLogger
2016-02-16 11:42:24.256信息47524---[main]com.example.ApplicationA:在2.9秒内启动了ApplicationA(JVM运行3.466)
应用程序A
应用程序B
2016-02-16 11:42:24.257信息47524---[Thread-1]s.c.a.annotation配置应用程序上下文:关闭org.springframework.context.annotation。AnnotationConfigApplicationContext@24a35978:启动日期[Tue Feb 16 11:42:21 PST 2016];上下文层次结构的根
2016-02-16 11:42:24.258信息47524---[Thread-1]o.s.c.support.DefaultLifecycle处理器:在阶段0中停止bean
2016-02-16 11:42:24.259信息47524---[Thread-1]o.s.i.endpoint.EventDrivenConsumer:删除{日志通道适配器:_org.springframework.integration.errorLogger}作为“errorChannel”通道的订户
2016-02-16 11:42:24.259信息47524---[Thread-1]o.s.i.channel.PublishSubscribeSchannel:channel'application.errorChannel'有0个订户。
2016-02-16 11:42:24.259信息47524---[Thread-1]o.s.i.endpoint.EventDrivenConsumer:stopped _org.springframework.integration.errorLogger
2016-02-16 11:42:24.260信息47524---[Thread-1]o.s.s.c.ThreadPoolTaskScheduler:正在关闭ExecutorService“taskScheduler”
2016-02-16 11:42:24.261信息47524---[Thread-1]o.s.j.e.a.注释MBeanExporter:关闭时注销JMX暴露的bean
建设成功
总时间:13.537秒
我看到两个xml上下文文件都被加载,因此两个文件中的bean都被添加到应用程序上下文中
为什么是Spri
./gradlew bootRun
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:findMainClass
:bootRun
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.3.1.RELEASE)
2016-02-16 11:42:21.889 INFO 47524 --- [ main] com.example.ApplicationA : Starting ApplicationA on LMC with PID 47524 (/Users/IdeaProjects/whyisitloadingeverything/build/classes/main started in /Users/IdeaProjects/whyisitloadingeverything)
2016-02-16 11:42:21.896 INFO 47524 --- [ main] com.example.ApplicationA : No active profile set, falling back to default profiles: default
2016-02-16 11:42:21.975 INFO 47524 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@24a35978: startup date [Tue Feb 16 11:42:21 PST 2016]; root of context hierarchy
2016-02-16 11:42:22.883 INFO 47524 --- [ main] o.s.b.f.xml.XmlBeanDefinitionReader : Loading XML bean definitions from class path resource [run-app-b-context.xml]
2016-02-16 11:42:23.081 INFO 47524 --- [ main] o.s.b.f.xml.XmlBeanDefinitionReader : Loading XML bean definitions from class path resource [run-app-a-context.xml]
2016-02-16 11:42:23.255 INFO 47524 --- [ main] o.s.b.f.config.PropertiesFactoryBean : Loading properties file from URL [jar:file:/Users/.gradle/caches/modules-2/files-2.1/org.springframework.integration/spring-integration-core/4.2.4.RELEASE/4780d5c2b680796844916402816135f0e79f166f/spring-integration-core-4.2.4.RELEASE.jar!/META-INF/spring.integration.default.properties]
2016-02-16 11:42:23.258 INFO 47524 --- [ main] o.s.i.config.IntegrationRegistrar : No bean named 'integrationHeaderChannelRegistry' has been explicitly defined. Therefore, a default DefaultHeaderChannelRegistry will be created.
2016-02-16 11:42:23.451 INFO 47524 --- [ main] faultConfiguringBeanFactoryPostProcessor : No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChannel will be created.
2016-02-16 11:42:23.470 INFO 47524 --- [ main] faultConfiguringBeanFactoryPostProcessor : No bean named 'taskScheduler' has been explicitly defined. Therefore, a default ThreadPoolTaskScheduler will be created.
2016-02-16 11:42:24.036 INFO 47524 --- [ main] o.s.b.f.config.PropertiesFactoryBean : Loading properties file from URL [jar:file:/Users/.gradle/caches/modules-2/files-2.1/org.springframework.integration/spring-integration-core/4.2.4.RELEASE/4780d5c2b680796844916402816135f0e79f166f/spring-integration-core-4.2.4.RELEASE.jar!/META-INF/spring.integration.default.properties]
2016-02-16 11:42:24.100 INFO 47524 --- [ main] o.s.s.c.ThreadPoolTaskScheduler : Initializing ExecutorService 'taskScheduler'
2016-02-16 11:42:24.226 INFO 47524 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2016-02-16 11:42:24.243 INFO 47524 --- [ main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0
2016-02-16 11:42:24.243 INFO 47524 --- [ main] o.s.i.endpoint.EventDrivenConsumer : Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
2016-02-16 11:42:24.244 INFO 47524 --- [ main] o.s.i.channel.PublishSubscribeChannel : Channel 'application.errorChannel' has 1 subscriber(s).
2016-02-16 11:42:24.244 INFO 47524 --- [ main] o.s.i.endpoint.EventDrivenConsumer : started _org.springframework.integration.errorLogger
2016-02-16 11:42:24.256 INFO 47524 --- [ main] com.example.ApplicationA : Started ApplicationA in 2.9 seconds (JVM running for 3.466)
application A
application B
2016-02-16 11:42:24.257 INFO 47524 --- [ Thread-1] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@24a35978: startup date [Tue Feb 16 11:42:21 PST 2016]; root of context hierarchy
2016-02-16 11:42:24.258 INFO 47524 --- [ Thread-1] o.s.c.support.DefaultLifecycleProcessor : Stopping beans in phase 0
2016-02-16 11:42:24.259 INFO 47524 --- [ Thread-1] o.s.i.endpoint.EventDrivenConsumer : Removing {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
2016-02-16 11:42:24.259 INFO 47524 --- [ Thread-1] o.s.i.channel.PublishSubscribeChannel : Channel 'application.errorChannel' has 0 subscriber(s).
2016-02-16 11:42:24.259 INFO 47524 --- [ Thread-1] o.s.i.endpoint.EventDrivenConsumer : stopped _org.springframework.integration.errorLogger
2016-02-16 11:42:24.260 INFO 47524 --- [ Thread-1] o.s.s.c.ThreadPoolTaskScheduler : Shutting down ExecutorService 'taskScheduler'
2016-02-16 11:42:24.261 INFO 47524 --- [ Thread-1] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown
BUILD SUCCESSFUL
Total time: 13.537 secs