SpringBoot的@SpringBootApplication说明以及在启动类以外的包写@Controller
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot的@SpringBootApplication说明以及在启动类以外的包写@Controller相关的知识,希望对你有一定的参考价值。
参考技术A @SpringBootApplication的作用在于声明SpringBoot工程启动类,它包含三个含义:@Configuration @EnableAutoConfiguration @ComponentScan
我这里主要说明 @ComponentScan ,另外两个注解的用法可查看 关于如何在其他包中写controller和简单介绍@SpringBootApplication
“组件扫描”注解的作用主要在于定义组件扫描的包路径,用法 @ComponentScan(value = "com.example") ,这样SpringBoot项目在启动过程中会自动扫描 com.example 包下所有的组件,即所有的 @Component , @Service , @Controller , @Repository 等,即 @Component 及 @Component 以下的所有注解。
如果value未定义,则只扫描当前类所在的包,即启动类所在的包。
Controller注解源码:
在了解了以上的关于@SpringBootApplication的作用后,如果想要在启动类所在包以外定义控制器的话需要在启动类重写@ComponentScan:
其中 BackApplication 类在 com.example.back 包下,我需要新定义的控制器在 com.example.mgr 下:
测试:
springboot获取上下文ApplicationContext
在springboot主程序里改成
public static void main(String[] args) // SpringApplication.run(SpringbootAPP.class, args);换成下面 SpringApplication sa = new SpringApplication(SpringbootAPP.class); sa.addListeners(new MainBusiListeners()); sa.run(args);
package com.xxx.xxxx; import com.xxx.utils.SpringContextUtils; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; /** * 启动监听 */ public class MainBusiListeners implements ApplicationListener<ContextRefreshedEvent> @Override public void onApplicationEvent(ContextRefreshedEvent event) SpringContextUtils.setApplicationContextByMain(event.getApplicationContext());
@Component public class SpringContextUtils private static ApplicationContext applicationContext; public static void setApplicationContextByMain(ApplicationContext applicationContext) if (SpringContextUtils.applicationContext == null) SpringContextUtils.applicationContext = applicationContext;
参考文章:https://www.cnblogs.com/qq931399960/p/10184151.html
以上是关于SpringBoot的@SpringBootApplication说明以及在启动类以外的包写@Controller的主要内容,如果未能解决你的问题,请参考以下文章
springboot获取上下文ApplicationContext