我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringBoot的@Autowired注解注入规则是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringBoot的@Autowired注解注入规则是什么

这篇文章主要讲解了“SpringBoot的@Autowired注解注入规则是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot的@Autowired注解注入规则是什么”吧!

@Autowired注解注入规则

@Autowired - 注入默认根据类型,匹配不到则根据bean名字

Spring中注解方式的默认beanName生成规则:

在Spring中,当我们配置一个bean的时候,可以不指定name,这样的话,Spring会生成一个默认的beanName

驼峰形式类名首字母小写:UserService--userService

特殊情况--当类名的首字母和第二个字母是大写的时候,将采用原始的类名作为beanName。CNService--CNService

验证

声明一个service接口:

public interface UserService {    void login();}

service接口的实现类,此时bean名字是userServiceImpl

@Servicepublic class UserServiceImpl implements userService {    @Override    public void login() {        System.out.println("user login...");    }}

编写Controller,注入service

@Controllerpublic class UserController {    @Autowired    private UserService userService;    public void userLogin() {        userService.login();    }}

测试

public class AppTest {    public static void main(String[] args) {        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");        UserController controller = (UserController) context.getBean("userController");        controller.login();    }}

测试成功输入:

user login...

修改第3步代码:

@Controllerpublic class UserController {    @Autowired    private UserService test;    public void userLogin() {        test.login();    }}

同样测试成功输入:

user login...

因为@Autowired 第一是按照类型去匹配的,此时IoC容器中UserService 接口只有一个实现类,所以属性名字怎么写都没关系,都可以注入进去

增加一个实现类,此时bean名字是 userServiceImpl2

@Servicepublic class UserServiceImpl2 implements userService {    @Override    public void login() {        System.out.println("user login...2");    }}

此时测试报错:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException:

因为一个接口有多个实现,所以@Autowired 就按照属性名字去找,即找一个名字为 test的bean注入,然而IoC容器不存在一个名字叫test的 bean,因此报错,把属性名改为下面任意一种就可以匹配到了

@Controllerpublic class UserController {    @Autowired    private UserService userServiceImpl;        @Autowired    private UserService userServiceImpl2;     @Autowired    @Qualifier("userServiceImpl")    private UserService test;    public void userLogin() {        userServiceImpl.login();        userServiceImpl2.login();        test.login();    }}

小结一下

一个接口只有一个实现类的情况下,属性名字怎么写都无所谓,因为按照类型匹配就只有一个bean

一个接口多个实现的情况下:

① 属性名字跟组件名字一致,组件名字可以在声明的时候指定,比如 @Service("abc")

② 属性名字跟组件名字不一致,配合@Qualifier 注解指定组件名字

@Autowired注解无法自动注入的错误

在使用springboot main方法启动项目时遇到[@Autowdired]注解无法注入,网上查了很多资料也是一位网上的大神的一句话理通了思路:

异常信息:

Action:Consider defining a bean of type 'com.boot.app.service.bootService' in your configuration.

controller层:

@RestController    @Autowired    private BootService bootService;    @RequestMapping(value="/query",method=RequestMethod.POST)    public String queryByStatus() {        return "query";    }}

发现注解均正常:

SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!“Application类”是指SpringBoot项目入口类。

这个类的位置很关键:如果Application类所在的包为:com.boot.app,则只会扫描com.boot.app包及其所有子包,如果service或dao所在包不在com.boot.app及其子包下,则不会被扫描!即, 把Application类放到dao、service所在包的上级,com.boot.Application知道这一点非常关键

Application类:

@SpringBootApplicationpublic class Application  extends SpringBootServletInitializer {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);         }

感谢各位的阅读,以上就是“SpringBoot的@Autowired注解注入规则是什么”的内容了,经过本文的学习后,相信大家对SpringBoot的@Autowired注解注入规则是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringBoot的@Autowired注解注入规则是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringBoot的@Autowired注解注入规则是什么

这篇文章主要讲解了“SpringBoot的@Autowired注解注入规则是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot的@Autowired注解注入规则是什么”吧
2023-06-25

SpringBoot@Autowired注入为空的情况解读

这篇文章主要介绍了SpringBoot@Autowired注入为空的情况解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-06

@Autowired注解注入的xxxMapper报错怎么办

这篇文章主要介绍了@Autowired注解注入的xxxMapper报错怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。@Autowired注解注入的xxxMapper报错
2023-06-25

.cn域名注册的规则是什么

1. 申请人必须是在中国大陆注册的企业、组织或个人;2. 只能使用中文、数字和“-”符号进行注册,域名长度不超过63个字符;3. 域名必须符合中国的法律法规和社会道德规范,不得含有任何违法、有害、淫秽、反动、侮辱性的词语;4. 申请人需要提
2023-06-11

Spring中@Autowired、@Resource和@Inject注解的区别是什么

这篇文章主要介绍了Spring中@Autowired、@Resource和@Inject注解的区别是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring中@Autowired、@Resource和@I
2023-07-05

springboot启动类的三大注解是什么

Spring Boot启动类通常使用三个注解:@SpringBootApplication、@EnableAutoConfiguration和@RestController(可选)。1. @SpringBootApplication:这是启
2023-08-31

SpringBoot中@Autowired注入service时出现循环依赖问题的解决方法

在SpringBoot中,使用@Autowired注入服务时可能遇到循环依赖问题。解决方法包括提前创建类实例、使用中间接口、使用@Lazy注解、使用AspectJ或使用循环依赖代理。预防循环依赖的最佳实践包括保持服务职责单一、避免不必要的依赖关系、使用依赖注入框架和遵循依赖反转原则。
SpringBoot中@Autowired注入service时出现循环依赖问题的解决方法
2024-04-02

springboot注解Aspect的实现方案是什么

这篇文章跟大家分析一下“springboot注解Aspect的实现方案是什么”。内容详细易懂,对“springboot注解Aspect的实现方案是什么”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着
2023-06-26

springboot常用注解及作用是什么

Spring Boot 是基于 Spring 框架的快速开发框架,其中常用的注解及作用如下:1. @SpringBootApplication:标注主程序类,表示这是一个Spring Boot应用程序,同时包含了启动类、配置类和组件扫描。2
2023-05-21

springboot application.properties文件注入数组方式是什么

这篇文章主要介绍“springboot application.properties文件注入数组方式是什么”,在日常操作中,相信很多人在springboot application.properties文件注入数组方式是什么问题上存在疑惑,
2023-06-25

springboot yml配置文件值的注入方式是什么

这篇文章跟大家分析一下“springboot yml配置文件值的注入方式是什么”。内容详细易懂,对“springboot yml配置文件值的注入方式是什么”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面
2023-06-26

linux命令的注释规范是什么

Linux命令的注释规范可以按照以下方式进行:命令说明:在注释中简要描述命令的功能和用途。可以包括命令的基本语法和参数等信息。参数说明:对于命令的各个参数,可以在注释中进行详细说明,包括参数的含义、用法和可选值等。示例:提供一些使用该命令的
2023-10-27

SpringBoot+Thymeleaf静态资源的映射规则是什么

本篇内容介绍了“SpringBoot+Thymeleaf静态资源的映射规则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Spring
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录