网站关键词提取工具,施工企业的施工现场消防安全责任人应是,医药网站建设的需求分析,网站架构的组成部分文章目录 Springboot 项目启动类放置位置springboot 默认包扫描机制启动类放在特定位置springboot 启动注解理解配置启动类扫描特定的包1、 ComponentScan2、利用 SpringBootApplication 注解的 scanBasePackages 属性 Springboot 项目启动类放置位置
如果我们使用 IDEA 或者 … 文章目录 Springboot 项目启动类放置位置springboot 默认包扫描机制启动类放在特定位置springboot 启动注解理解配置启动类扫描特定的包1、 ComponentScan2、利用 SpringBootApplication 注解的 scanBasePackages 属性 Springboot 项目启动类放置位置
如果我们使用 IDEA 或者 Spring 官网创建 springboot 项目他会自动将启动类 XxxApplication 放到一个包下面。但是如果想要自己将启动类放在某个位置那么又将如何操作
springboot 默认包扫描机制
首先我们要知道 springboot 默认包扫描机制默认扫描启动类所在的包同级文件和子包下的文件。
springboot 的启动类是不能直接放在 main/java 文件夹下,所在的包是最顶部的包。
如下图所示所有的项目代码都在 com.cuiyuidong.learn 包下那么把启动类 IntroductionSpringSecurity 放在 com.cuiyuidong.learn 下面就可以扫描到 learn 包下面的所有代码。
启动类配置如下只需要加上 SpringBootApplication 注解即可
package com.cuiyuidong.learn;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication
public class IntroductionSpringSecurity {public static void main(String[] args) {SpringApplication.run(IntroductionSpringSecurity.class,args);}
}启动类放在特定位置
有时候我们希望把启动类放在同一个特定的位置但是由于默认包扫描机制如果我们将启动类放在自己设定的特定位置而不作一些特定配置那么启动类则不会扫描到所有的包。
如下图所示将启动类放在 ApplicationSetUp 包下面启动项目同时在 Controller 包下创建一个 SpringSecurityController 类代码如下
package com.cuiyuidong.learn.Controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;RestController
public class SpringSecurityController {GetMapping(value /hello)public String hello(){return world hello;}
}测试结果会发现测试结果是 404 Not Found。因为启动类没有扫描到 Controller 这个包。那么要如何解决这个问题呢 springboot 启动注解理解
使用 SpringBootApplication 标注的类是 SpringBoot 的主配置类。核心注解是以下三个
1. SpringBootConfiguration 标注在某个类上表示该类是SpringBoot的配置类
2. EnableAutoConfiguration 以前我们需要配置的东西在SpringBoot启动后会帮我们自动配置
3. ComponentScan 用于通过注解指定spring在创建容器时要扫描的包配置启动类扫描特定的包
根据上面 springboot 启动注解理解我们可以通过注解配置扫描特定的包。
1、 ComponentScan
代码如下 在启动类上加上 ComponentScan 注解同时加上要扫描的包 ComponentScan(basePackages com.cuiyuidong.learn.*)当然也可以具体到某一个包 ComponentScan(basePackages com.cuiyuidong.learn.Controller)
需要注意的是如果包下面有很多子包如 learn 包那么可以用通配符 .* 。
package com.cuiyuidong.learn.ApplicationSetUp;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;SpringBootApplication
ComponentScan(basePackages com.cuiyuidong.learn.*)
public class IntroductionSpringSecurity {public static void main(String[] args) {SpringApplication.run(IntroductionSpringSecurity.class, args);}
}测试结果: 2、利用 SpringBootApplication 注解的 scanBasePackages 属性
代码如下
package com.cuiyuidong.learn.ApplicationSetUp;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication(scanBasePackages {com.cuiyuidong.learn.*})
public class IntroductionSpringSecurity {public static void main(String[] args) {SpringApplication.run(IntroductionSpringSecurity.class, args);}
}