【第9章】@Autowired

news2025/2/8 1:02:45

文章目录

  • 前言
  • 一、@Autowired注入
    • 1. 属性注入
    • 2. 构造方法注入
    • 3. set方法注入
    • 4. 形参注入
    • 5. byName注入
      • 5.1 新增实现类
      • 5.2 注入
  • 二、@Resource
    • 1.引入库
    • 2.使用
      • 2.1 根据注解的name值注入
      • 2.2 根据对象变量名注入
      • 2.3 根据对象类型注入
  • 总结


前言

【第8章】全注解开发介绍了全注解开发,有使用到@Autowired注解,关于它为什么要单独开一章呢,因为它太重要了,还经常拿来和@Resource做对比。


一、@Autowired注入

本章内容基于前面章节基础,基于不重复造轮子理论,只提供样例代码

@Autowired根据对象的类型去容器中查找:

  • 未找到,会抛出异常
  • 找到一个,完成注入
  • 存在多个,注入失败,抛出异常

1. 属性注入

package org.example.autowired.controller;

import org.example.autowired.service.UserService;
import org.springframework.stereotype.Controller;

/**
 * Create by zjg on 2024/4/5
 */
@Controller
public class UserController {
    //属性注入
    @Autowired
    UserService userService;
    public void addUser(){
        System.out.println("执行...UserController");
        userService.addUserService();
    }
}

2. 构造方法注入

package org.example.autowired.controller;

import org.example.autowired.service.UserService;
import org.springframework.stereotype.Controller;

/**
 * Create by zjg on 2024/4/5
 */
@Controller
public class UserController {
	//构造方法注入
    UserService userService;
    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }
    public void addUser(){
        System.out.println("执行...UserController");
        userService.addUserService();
    }
}

3. set方法注入

package org.example.autowired.controller;

import org.example.autowired.service.UserService;
import org.springframework.stereotype.Controller;

/**
 * Create by zjg on 2024/4/5
 */
@Controller
public class UserController {
	//set方法注入
    UserService userService;
    @Autowired
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    public void addUser(){
        System.out.println("执行...UserController");
        userService.addUserService();
    }
}

4. 形参注入

package org.example.autowired.controller;

import org.example.autowired.service.UserService;
import org.springframework.stereotype.Controller;

/**
 * Create by zjg on 2024/4/5
 */
@Controller
public class UserController {
	//形参注入
    UserService userService;
    public UserController(@Autowired(required = false) UserService userService) {
        this.userService = userService;
    }
    public void addUser(){
        System.out.println("执行...UserController");
        userService.addUserService();
    }
}

5. byName注入

5.1 新增实现类

UserService 是一个接口,有UserServiceImpl和AdminServiceImpl 两个实现类

package org.example.autowired.service.impl;

import org.example.autowired.dao.UserDao;
import org.example.autowired.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * Create by zjg on 2024/4/5
 */
@Service
public class AdminServiceImpl implements UserService {
    @Autowired
    UserDao userDao;

    @Override
    public void addUserService() {
        System.out.println("执行...AdminServiceImpl");
        userDao.addUserDao();
    }
}

5.2 注入

package org.example.autowired.controller;

import org.example.autowired.service.UserService;
import org.springframework.stereotype.Controller;

/**
 * Create by zjg on 2024/4/5
 */
@Controller
public class UserController {
	//byName注入
    @Autowired
    @Qualifier(value = "adminServiceImpl")
    UserService userService;
    public void addUser(){
        System.out.println("执行...UserController");
        userService.addUserService();
    }
}

二、@Resource

自从oracle收购了sun公司,搞出了一堆幺蛾子,java跟长了腿似的,版本蹭蹭往上涨,指不定后面还有收费

在这里插入图片描述
@Resource注解在JDK1.8中是自带的,JDK17中已经不再提供了,需要我们单独去下载,没办法整呗

1.引入库

<!-- https://mvnrepository.com/artifact/jakarta.annotation/jakarta.annotation-api -->
<dependency>
    <groupId>jakarta.annotation</groupId>
    <artifactId>jakarta.annotation-api</artifactId>
    <version>2.1.1</version>
</dependency>

2.使用

2.1 根据注解的name值注入

import jakarta.annotation.Resource;
import org.example.autowired.service.UserService;
import org.springframework.stereotype.Controller;

@Controller
public class UserController {
    @Resource(name="userServiceImpl")
    UserService userService;
    public void addUser(){
        System.out.println("执行...UserController");
        userService.addUserService();
    }
}

2.2 根据对象变量名注入

import jakarta.annotation.Resource;
import org.example.autowired.service.UserService;
import org.springframework.stereotype.Controller;

@Controller
public class UserController {
    @Resource
    UserService userServiceImpl;
    public void addUser(){
        System.out.println("执行...UserController");
        userServiceImpl.addUserService();
    }
}

2.3 根据对象类型注入

根据类型注入,需要保证只有一个实现类被匹配到,否则会抛出异常

import jakarta.annotation.Resource;
import org.example.autowired.service.UserService;
import org.springframework.stereotype.Controller;

@Controller
public class UserController {
   @Resource
    UserService userService;
    public void addUser(){
        System.out.println("执行...UserController");
        userService.addUserService();
    }
}

总结

回到顶部
官方网站
官方文档
视频学习

个人感觉@Resource的匹配机制要更灵活一些,两者除了使用方式和匹配机制不同,基本上都能满足业务需要,具体使用哪个看项目而定吧,项目中大量使用哪个咱们就用哪个,如果是新项目需要使用到spring框架那就用@Autowired,毕竟是自家产品兼容性可能更好一些,其他情况完全可以用@Resource。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1598222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电竞陪玩系统开发平台搭建(小程序,公众号,app)线上线下皆有,线下计算距离。

六大核心功能 1.游戏陪练:可以选择当下火爆的游戏内容&#xff0c;选择游戏大神、职业玩家进行陪练&#xff0c;也可约附近路人玩家或是身边的小伙伴语音组队开黑&#xff0c;一起享受边玩游戏边吐槽的无限乐趣。 2.约玩交友:除了游戏陪玩功能&#xff0c;系统还设置了单独的语…

将自己的项目上传至Git

一、安装Git 官网:Git (git-scm.com) 二、注册gitee 官网:工作台 - Gitee.com 进入“我的”出现以下界面 三、创建仓库 点击加号&#xff0c;新建仓库 根据自己的需求取名&#xff0c;描述仓库&#xff0c;开源还是私有&#xff0c;点击创建即可&#xff0c;点击我的即可…

Linux学习-数据库

数据库软件: 关系型数据库: Mysql Oracle SqlServer Sqlite 非关系型数据库&#xff1a; Redis NoSQL 1.数组、链表、文件、数据库 数组、链表: 内存存放数据的方式(代码运行结束、关机数据丢失) 文件、…

一文掌握 React 开发中的 JavaScript 基础知识

前端开发中JavaScript是基石。在 React 开发中掌握掌握基础的 JavaScript 方法将有助于编写出更加高效、可维护的 React 应用程序。 在 React 开发中使用 ES6 语法可以带来更简洁、可读性更强、功能更丰富,以及更好性能和社区支持等诸多好处。这有助于提高开发效率,并构建出更…

MongoDB 索引全攻略

目录 一、索引介绍 1.1 单字段索引 1.2 复合索引 1.3 多键索引 1.4 主键索引 1.5 TTL 索引 1.6 地理空间索引 1.7 哈希索引 1.8 创建索引时注意事项 1.9 索引效果查看 二、索引实现原理 2.1 为什么使用 B-Tree 三、执行计划 一、索引介绍 任何数据库都有索引这一核心功能&…

Centos7.6部署minikube

1、什么是minikube ? Minikube是由Kubernetes社区维护的单机版的Kubernetes集群&#xff0c;支持macOS, Linux, and Windows等多种操作系统平台&#xff0c;使用最新的官方stable版本&#xff0c;并支持Kubernetes的大部分功能&#xff0c;从基础的容器编排管理&#xff0c;到…

基于AutoCAD的WMTS服务加载方法与应用研究

"针对在AutoCAD中加载地图存在数据定位操作复杂、数据渲染效率低、无法接入第三方地理信息服务的问题&#xff0c;提出了在AutoCAD中加载OGC标准的网络地图分块服务方法。基于ObjectARX二次开发插件&#xff0c;实现在AutoCAD中加载WMTS服务&#xff0c;兼容了第三方地理信…

基于Springboot的旅游管理系统

基于SpringbootVue的旅游管理系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页展示 旅游方案展示 旅游资讯 后台管理员登录 后台管理页面首页 用户管理 …

【自动驾驶】贝叶斯算法在机器学习中的应用研究

目录 第一章&#xff1a;引言 1.1 贝叶斯算法在机器学习中的重要性 1.2 研究背景 1.3 研究目的 1.4 论文结构 第二章&#xff1a;贝叶斯算法概述 2.1 贝叶斯定理 2.2 贝叶斯算法分类 第三章&#xff1a;贝叶斯算法在机器学习中的应用 3.1 贝叶斯分类器 3.2 贝叶斯回…

SpringSecurity源码分析3--UserDetail部分

UserDetailsService.class DaoAuthenticationProvider.class AbstractUserDetailsAuthenticationProvider.class 一个允许子类重写和处理UserDetails对象的基AuthenticationProvider。该类旨在响应UsernamePasswordAuthenticationToken身份验证请求。 AuthenticationProvider…

Gartner 《2024安全和风险管理技术路线图》:高价值技术 DSP 进入广泛部署阶段

近期&#xff0c;Gartner 发布《2024年技术采用路线图&#xff1a;安全与风险管理》&#xff08;以下简称&#xff1a;《路线图》&#xff09;&#xff0c;该信息图表识别了全球企业正在采用的 44 种与安全相关的技术&#xff0c;并根据采用阶段、部署风险和企业价值进行了映射…

python中的列表、元组、字典、集合(字典篇)

数据类型定义符号访问元素是否可变是否重复是否有序列表 [ ]索引可变可重复有序元组&#xff08;&#xff09;索引不可变可重复有序字典{key&#xff1a;value}键可变可重复无序集合{ }可变不可重复无序 字典概念 在python语言中&#xff0c;字典属于内置容器类&#xff0c;其…

什么是云安全

云安全和网络安全有所不同&#xff0c;因为云安全一词 比网络安全更涵盖整个企业基础设施。一般来说&#xff0c;当人们提到云安全时&#xff0c;指的是第三方服务提供商提供的 IaaS 云环境。在这种情况下&#xff0c;云安全不仅包括网络安全工具&#xff0c;还包括服务器、容器…

C#基础|数据类型、变量

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 01 数据类型 数据类型是为了方便存储数据的&#xff0c;为了将数据按照不同的分类存储&#xff0c;所以引入数据类型。这个在PLC中已经很熟悉了。 数据类型的作用&#xff1a;就是为了更好地管理内存&#xff0c;为…

[C++][算法基础]求最小生成树(Prim)

给定一个 n 个点 m 条边的无向图&#xff0c;图中可能存在重边和自环&#xff0c;边权可能为负数。 求最小生成树的树边权重之和&#xff0c;如果最小生成树不存在则输出 impossible。 给定一张边带权的无向图 G(V,E)&#xff0c;其中 V 表示图中点的集合&#xff0c;E 表示图…

【深度学习】AI修图——DragGAN原理解析

1、前言 上一篇&#xff0c;我们讲述了StyleGAN2。这一篇&#xff0c;我们就来讲一个把StyleGAN2作为基底架构的DragGAN。DragGAN的作用主要是对图片进行编辑&#xff0c;说厉害点&#xff0c;可能和AI修图差不多。这篇论文比较新&#xff0c;发表自2023年 原论文&#xff1a…

拼多多容器文件修改自动上传

拼多多开放平台php环境是官方的linux容器&#xff0c;不能自己搭建ftp上传文件&#xff0c;每每有文件更新都挺麻烦。 有些功能测试不想每次都打包全部代码上去重新发布一次程序生成新的容器&#xff0c;那样太过麻烦和效率低。 一开始搞了一个php的文件管理工具上去&#xf…

高效解决Visual Studio Code中文乱码问题

文章目录 问题解决步骤 问题 Visual Studio Code新建一个文件编码方式总是默认GBK&#xff0c;如果我不修改成默认UTF-8&#xff0c;那么每次运行&#xff0c;如果有中文需要输出就会乱码&#xff01; 解决步骤 之后我会持续更新&#xff0c;如果喜欢我的文章&#xff0c;请记…

Apache DolphinScheduler 社区 3 月月报

各位热爱 DolphinScheduler 的小伙伴们&#xff0c;DolphinScheduler 社区月报开始更新啦&#xff01;这里将记录 DolphinScheduler 社区每月的重要更新。 社区为 DolphinScheduler 3.2.x 版本做了诸多功能改进和 bug 修复 DolphinScheduler 月度 Merge Stars 感谢以下小伙伴 …

腾讯云轻量应用服务器端口怎么打开?

腾讯云轻量应用服务器端口怎么打开&#xff1f;在轻量应用服务器控制台的防火墙中开启端口&#xff0c;本文腾讯云百科txybk.com以80端口为例&#xff0c;来详细说下轻量应用服务器端口打开教程&#xff0c;另外可以在腾讯云百科 txy.wiki 查看当前轻量服务器最新的优惠券和配置…