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

亲测接口自动化01_Eclipse运行springBootApp

springboot学习系列

SpringBoot启动原理解析

Springboot 系列Spring Boot 自动配置

springboot添加@Scheduled定时任务多线程执行