Springboot中@Autowired为何获取了我们没有注入的Bean?
Springboot中@Autowired为何获取了我们没有注入的Bean?
在做仿牛客网项目的时候,有这样一段话:
@Autowired
private TemplateEngine templateEngine;
在写到这里的时候我很疑惑,我自己明明没有手动注入这个类,为何能够通过@Autowired进行自动装配?
我有从头检查到尾,发现的确没有将该类给IOC容器管理。于是我怀疑是springboot启动的时候将该类自动交给了IOC容器进行管理,但是我没有证据。
于是我踏上了漫长的查找自动装配的原因的过程…
在经过很长时间的寻找后,我终于确定是springboot在启动的时候将该类自动交给了IOC容器进行管理。
在springboot入口处加入以下代码
@SpringBootApplication
public class CommunityApplication {
public static void main(String[] args) {
SpringApplication.run(CommunityApplication.class, args);
}
/**
* 项目启动之前,预先加载数据。比如,权限容器、特殊用户数据等。通常我们可以使用监听器、事件来操作。
* 但是,springboot提供了一个简单的方式来实现此类需求,即,CommandLineRunner。
* Spring Boot应用程序在启动后,会遍历CommandLineRunner接口的实例并运行它们的run方法。
* 也可以利用@Order注解(或者实现Order接口)来规定所有CommandLineRunner实例的运行顺序。@Order(value=1)
* @author Sepnine
* @date: 2022/9/14 18:36
*/
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
System.out.println("项目启动,正在加载数据...");
System.out.println("Let's inspect the beans provided by Spring Boot:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
};
}
}
重新启动项目

发现springboot在启动的时候就已经将该类给了IOC容器,除此之外还将很多Bean交给了IOC容器。
Springboot中@Autowired为何获取了我们没有注入的Bean?的更多相关文章
- 为何在新线程中使用注解获取不到Spring管理的Bean
新建的线程类NewThread,在这个类中国使用Spring的注解获取Service,为null 网上已有这种问题的解决方案,但是为何在新线程中使用注解获取不到Spring管理的Bean? 问了老大, ...
- Spring通过注解@Autowired/@Resource获取bean实例时为什么可以直接获取接口而不是注入的类
问: 这个问题困扰了我好久,一直疑问这个接口的bean是怎么注入进去的?因为只看到使用@Service注入了实现类serviceImpl,使用时怎么却获取的接口,而且还能调用到实现类的方法,难道这个接 ...
- 如何在静态方法或非Spring Bean中注入Spring Bean
在项目中有时需要根据需要在自己new一个对象,或者在某些util方法或属性中获取Spring Bean对象,从而完成某些工作,但是由于自己new的对象和util方法并不是受Spring所 ...
- [十]SpringBoot 之 普通类获取Spring容器中的bean
我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用 ...
- Springboot中如何在Utils类中使用@Autowired注入bean
Springboot中如果希望在Utils工具类中,使用到我们已经定义过的Dao层或者Service层Bean,可以如下编写Utils类: 1. 使用@Component注解标记工具类Statisti ...
- SpringBoot 之 普通类获取Spring容器中的bean
[十]SpringBoot 之 普通类获取Spring容器中的bean 我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器 ...
- springboot中如果使用了@Autowired注入了bean,则这个类也要为spring bean,new出来注入的bean为null
https://blog.csdn.net/Mr_Runner/article/details/83684088 问题:new出来的实例中含有@Autowired注入时,注入的Bean为null: 解 ...
- 由浅入深学习springboot中使用redis
很多时候,我们会在springboot中配置redis,但是就那么几个配置就配好了,没办法知道为什么,这里就详细的讲解一下 这里假设已经成功创建了一个springboot项目. redis连接工厂类 ...
- springboot中使用自定义两级缓存
工作中用到了springboot的缓存,使用起来挺方便的,直接引入redis或者ehcache这些缓存依赖包和相关缓存的starter依赖包,然后在启动类中加入@EnableCaching注解,然后在 ...
- SpringBoot中异步请求和异步调用(看这一篇就够了)
原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10661591.html,否则将追究法律责任!!! 一.SpringBoot中异步请求的使用 ...
随机推荐
- uniapp获取本机所有应用包名
huoqu(e){ uni.showLoading({ title: '获取中' }); const main = plus.android.runtimeMainActivity(); let pM ...
- pull request 猜想
先从某个地方 fork 一个项目, 我上传一个 git commit, 然后自动显示是否要 pull request, 点 是, 然后就发送到 charger 那里去了.1, git fork,2, ...
- Java 分布式锁实现的一些实践
近期换工作,闲下来有点时间写点东西,在这里分享一些心得体会 背景:我们在做后端开发时,无法避免的会遇到一些一致性问题,有时候我们前端的小伙伴或者rpc接口的调用方,在很短的时间间隔内给我们相同的请求, ...
- 像MIUI一样做Zabbix二次开发(5)——那些坑和优化方向
踩过的那些坑 从2011年开始玩Zabbix,踩过的坑着实不少,被研发的同事吐了无数槽,所谓"情到深度又爱又恨".以下简述印象比较深刻的几个坑: 二次开发的方式:2011刚开始做的 ...
- mariadb数据库用户管理(创建、赋权、)
数据库查看当前用户 select user(): MariaDB [(none)]> select user(); +----------------+ | user() | +-------- ...
- Mysql数据库基础第三章:DML语言
Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...
- SAP GGB0 校验
需求,针对财务凭证分配号的要求 在满足条件下进行必填校验 在需要的位置 创建确认 创建步骤,一般通过点击就可以形成需要的前提逻辑,也可以通过 设置->专门方式 来进行自定义编写. 如果前提条件是 ...
- Linux 看进程的线程数
pstree -p 12345|wc -l 看进程的线程数 centos7默认并没有安装pstree,所以会有pstree:command not found 安装一下 yum install psm ...
- git版本回退:git reset --hard 版本号
开发项目中会遇到各种奇葩的事情: 奇葩系列之在项目更新迭代开发正带劲的时候突然更新项目之前的项目出问题了要修复.在开发功能一半又要修复之前的问题着急上线的情况下.此时此刻git的版本回退是那么的迷人, ...
- pytorch学习笔记(3)--dataset使用
下载数据集 import torchvision from torch.utils.tensorboard import SummaryWriter dataset_transform = torch ...