当前位置: 首页 > news >正文

java:【@ComponentScan】和【@SpringBootApplication】扫包范围的冲突

# 代码结构如下:

在这里插入图片描述
注意【com.chz.myBean.branch】和【com.chz.myBean.main】这两个包是没有生重叠的。
主程序【MyBeanTest1、MyBeanTest2、MyBeanTest3】这两个类是在包【com.chz.myBean.main】下

# 示例代码

【pom.xml】

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><version>2.3.12.RELEASE</version>
</dependency>

【application.properties】

server.port=8080
spring.application.name=myBeanmanagement.server.port=7001
management.endpoints.web.exposure.include=*branch.bean.name=I am branch bean

【BranchBean.java】

package com.chz.myBean.branch.bean;@Slf4j
@Getter
@Setter
@Component
public class BranchBean 
{@Value("${branch.bean.name:}")private String name;
}

【BranchController.java】

package com.chz.myBean.branch.controller;@Slf4j
@RestController
@RequestMapping("/branch")
public class BranchController {@Autowiredprivate BranchBean branchBean;@GetMapping("/test1")public String test1() {return "test1: " + branchBean.getName();}@GetMapping("/test2")public String test2() {return "test2";}
}

【MainBean.java】

package com.chz.myBean.main.bean;@Getter
@Setter
@Component
public class MainBean 
{@Autowiredprivate BranchBean bean;
}

【MainController.java】

package com.chz.myBean.main.controller;@Slf4j
@RestController
@RequestMapping("/main")
public class MainController 
{@Autowiredprivate MainBean mainBean;@GetMapping("/test1")public String test1() {return "test1: " + mainBean.getBean().getName();}@GetMapping("/test2")public String test2() {return "test2";}
}

【MyBeanTest1.java】

package com.chz.myBean.main;@SpringBootApplication(scanBasePackages = "com.chz.myBean.branch",scanBasePackageClasses = MyBeanTest1.class
)
public class MyBeanTest1 {public static void main(String[] args) {SpringApplication.run(MyBeanTest1.class, args);}
}

上面这个类是最正常的情况,扫包的范围放在【@SpringBootApplication】,后面的结果测试正常。

【MyBeanTest2.java】

package com.chz.myBean.main;@ComponentScan(basePackages = "com.chz.myBean.branch",basePackageClasses = MyBeanTest2.class
)
@SpringBootApplication(
)
public class MyBeanTest2 
{public static void main(String[] args) {SpringApplication.run(MyBeanTest2.class, args);}
}

上面这个类扫包的范围不放在【@SpringBootApplication】,而是放在【@ComponentScan】,后面的结果测试正常。

【MyBeanTest3.java】

package com.chz.myBean.main;@ComponentScan(basePackages = "com.chz.myBean.branch"
)
@SpringBootApplication(scanBasePackageClasses = MyBeanTest3.class
)
public class MyBeanTest3 
{public static void main(String[] args) {SpringApplication.run(MyBeanTest3.class, args);}
}

上面这个类放包的范围放在【@ComponentScan】和【@SpringBootApplication】两个里面,后面的结果测试不正常。

# 开始测试

测试1

启动【MyBeanTest1】,可以看到【branch】和【main】包里面的bean都扫到了
在这里插入图片描述

测试2

关掉【MyBeanTest1】,启动【MyBeanTest2】,也可以看到【branch】和【main】包里面的bean都扫到了
在这里插入图片描述

测试3

关掉【MyBeanTest2】,启动【MyBeanTest3】,可以看到只有【branch】包里面的bean扫到了。也就是说当【@ComponentScan】和【@SpringBootApplication】都存在扫包范围时,只有【@ComponentScan】里面配置的扫包范围会生效。
在这里插入图片描述

http://www.lryc.cn/news/373992.html

相关文章:

  • 本学期嵌入式期末考试的综合项目,我是这么出题的
  • CSS概述
  • Tensorflow-GPU工具包了解和详细安装方法
  • 【python】OpenCV GUI——Trackbar(14.2)
  • Qt自定义日志输出
  • [C++] vector list 等容器的迭代器失效问题
  • Java——变量作用域和生命周期
  • WPF界面设计
  • 【C#】使用JavaScriptSerializer序列化对象
  • HTML静态网页成品作业(HTML+CSS)—— 明星吴磊介绍网页(5个页面)
  • EasyRecovery2024数据恢复神器#电脑必备良品
  • 前端HTML相关知识
  • 集合面试题
  • 集成学习概述
  • 记录一次root过程
  • 函数(上)(C语言)
  • ARM-V9 RME(Realm Management Extension)系统架构之系统安全能力的侧信道抵御
  • Java高级技术探索:深入理解JVM内存分区与GC机制
  • 新视野大学英语2 词组 6.15
  • 【JavaScript】MDN
  • Qt/C++中的异步编程
  • 解决javadoc一直找不到路径的问题
  • 存储器的性能指标以及层次化存储器
  • 【C++】C++入门的杂碎知识点
  • springboot 整合redis问题,缓存击穿,穿透,雪崩,分布式锁
  • 免费个人站 独立站 wordpress 自建网站
  • 散列函数的基本概念
  • 【C++拷贝构造函数深浅拷贝】
  • 快速编译安装tensorrt_yolo
  • 外盘黄金期货需要注意什么?