【spring】@Autowired注解学习

@Autowired介绍

Spring框架是Java领域中一个非常重要的企业级应用开发框架,它提供了全面的编程和配置模型,旨在帮助开发者更快速、更简单地创建应用程序。在Spring框架中,@Autowired是一个非常重要的注解,它用于实现依赖注入(Dependency Injection, DI)的功能。

@Autowired注解是Spring框架提供的一种自动装配(autowiring)的方式。当一个bean需要注入一个或多个依赖时,Spring容器会自动寻找匹配的bean并注入。这个过程是基于类型(byType)的,默认情况下,Spring会寻找类型匹配的唯一bean来完成注入。如果找到多个同类型的bean,则需要通过其他方式指定具体注入哪一个。

什么是依赖注入?

依赖注入是一种设计模式,用于减少代码之间的耦合度。在这个模式中,对象不需要自己创建它所依赖的对象,而是通过外部注入这些依赖对象。这样可以提高代码的灵活性和可测试性,因为依赖的对象可以被轻松替换或修改。

@Autowired源码

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {boolean required() default true;}
源代码截图

@Autowired属性介绍

  • required:表示是否必须注入成功,取值为true或false。默认值是true,表示必须注入成功。当取值为true时,注入不成功会报错,否则,注入不成功不会报错。如果设置为false,则允许注入的依赖为null。从Spring 4.3开始,@Autowired可以用于final字段,但这种情况下不能设置required属性为false。如果需要自定义注入逻辑,可以通过实现@Autowired注解的@AutowiredAnnotationBeanPostProcessor类来实现。

@Autowired注解使用场景

  1. 构造函数注入:当 @Autowired 注解应用于构造函数时,Spring 容器会在创建 bean 时自动调用该构造函数,并注入所有需要的依赖。

  2. 方法注入:当 @Autowired 注解应用于方法时,Spring 容器会在创建 bean 后调用该方法,并注入所有需要的依赖。

  3. 字段注入:当 @Autowired 注解应用于字段时,Spring 容器会在创建 bean 时自动注入该字段。

  4. 属性 setter 方法注入:当 @Autowired 注解应用于 setter 方法时,Spring 容器会在创建 bean 后调用该 setter 方法,并注入所有需要的依赖。

  5. 当有多个Bean符合注入条件时,可以使用@Qualifier注解与@Autowired结合使用,来指定具体要注入的Bean。这样可以解决自动装配时的歧义问题。

@Autowired测试示例代码

示例代码 一
AutowiredDemoService类
package com.yang.SpringTest.annotation.autowiredLearn;import org.springframework.stereotype.Service;/*** <p>Service类</p>** @author By: chengxuyuanshitang* Package com.yang.SpringTest.annotation.autowiredLearn* Ceate Time 2024-03-28 13:53*/
@Service
public class AutowiredDemoService {public void test () {System.out.println ("this is AutowiredDemoService test");}
}
AutowiredDemoController类
package com.yang.SpringTest.annotation.autowiredLearn;import lombok.ToString;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;/*** <p>Controller类</p>** @author By: chengxuyuanshitang* Package com.yang.SpringTest.annotation.autowiredLearn* Ceate Time 2024-03-28 13:53*/
@ToString
@Controller
public class AutowiredDemoController {@Autowiredprivate AutowiredDemoService autowiredDemoService;public void test () {System.out.println ("AutowiredDemoController.test");autowiredDemoService.test ();}}
AutowiredDemoConfig配置类
package com.yang.SpringTest.annotation.autowiredLearn;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;/*** <p>AutowiredDemoConfig配置类</p>** @author By: chengxuyuanshitang* Package com.yang.SpringTest.annotation.autowiredLearn* Ceate Time 2024-03-28 13:56*/
@Configuration
@ComponentScan(value = {"com.yang.SpringTest.annotation.autowiredLearn"})
public class AutowiredDemoConfig {
}
AutowiredDemoTest测试类
package com.yang.SpringTest.annotation.autowiredLearn;import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;/*** <p>AutowiredDemoTest测试类</p>** @author By: chengxuyuanshitang* Package com.yang.SpringTest.annotation.autowiredLearn* Ceate Time 2024-03-28 13:57*/
@Slf4j
public class AutowiredDemoTest {public static void main (String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext (AutowiredDemoConfig.class);AutowiredDemoService autowiredDemoService = context.getBean (AutowiredDemoService.class);log.info ("autowiredDemoService is : [ {} ]", autowiredDemoService);AutowiredDemoController autowiredDemoController = context.getBean (AutowiredDemoController.class);log.info ("autowiredDemoController is : [ {} ]", autowiredDemoController);autowiredDemoController.test ();}
}
运行结果




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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WebJs 爬虫】逆向进阶技术必知必会

前言 在数字化时代&#xff0c;网络爬虫已成为一种强大的数据获取工具&#xff0c;广泛应用于市场分析、竞争对手研究、舆情监测等众多领域。爬虫技术能够帮助我们快速、准确地获取网络上的海量信息&#xff0c;为决策提供有力支持。然而&#xff0c;随着网络环境的日益复杂和…

EditText 实现密码可见与不可见

效果图 布局代码 <androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width"match_parent"android:layout_height"wrap_content"><TextViewandroid:id"id/tv_account_hint"style"style/create_account_left"…

JAVA面试八股文之集合

JAVA集合相关 集合&#xff1f;说一说Java提供的常见集合&#xff1f;hashmap的key可以为null嘛&#xff1f;hashMap线程是否安全, 如果不安全, 如何解决&#xff1f;HashSet和TreeSet&#xff1f;ArrayList底层是如何实现的&#xff1f;ArrayList listnew ArrayList(10)中的li…

flutter 修改app名字和图标

一、修改名字 在Android中修改应用程序名称&#xff1a; 在AndroidManifest.xml文件中修改应用程序名称&#xff1a; 打开Flutter项目中的android/app/src/main/AndroidManifest.xml文件。找到<application>标签&#xff0c;然后在android:label属性中修改应用程序的名称…

《QT实用小工具·四》屏幕拾色器

1、概述 源码放在文章末尾 该项目实现了屏幕拾色器的功能&#xff0c;可以根据鼠标指定的位置识别当前位置的颜色 项目功能包含&#xff1a; 鼠标按下实时采集鼠标处的颜色。 实时显示颜色值。 支持16进制格式和rgb格式。 实时显示预览颜色。 根据背景色自动计算合适的前景色…

基于Python的电商特产数据可视化分析与推荐系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 利用网络爬虫技术从某东采集某城市的特产价格、销量、评论等数据&#xff0c;经过数据清洗后存入数据库&#xff0c;并实现特产销售、市场占有率、价格区间等多维度的可视化统计分析&#xff0c;并…

linux中查看内存占用空间

文章目录 linux中查看内存占用空间 linux中查看内存占用空间 使用 df -h 查看磁盘空间 使用 du -sh * 查看每个目录的大小 注意这里是当前目录下的文件大小&#xff0c;查看系统的可以回到根目录 经过查看没有发现任何大的文件夹。 继续下面的步骤 如果您的Linux磁盘已满&a…

【LVGL-字库应用】

LVGL-中文字库应用 ■ LVGL-内部字库■ LVGL 内部字库的使用流程&#xff1a; ■ LVGL-自定义字库■ 方法一&#xff1a;C 语言数组&#xff08;内部读取&#xff09;-在线转换工具■ 方法二&#xff1a;C 语言数组&#xff08;内部读取&#xff09;-利用离线字体转换软件&…

ISG100-160立式管道泵

引言&#xff1a; 在现代工业生产和日常生活中&#xff0c;安全且高效的流体输送系统是不可或缺的。其中&#xff0c;ISG100-160立式管道泵因其出色的性能和可靠性而广受青睐。本文将全面介绍这款管道泵的技术参数、特点、应用场景以及安装与维护的相关知识&#xff0c;以帮助用…

免费翻译pdf格式论文

进入谷歌翻译网址https://translate.google.com/?slauto&tlzh-CN&opdocs 将需要全文翻译的pdf放进去 选择英文到中文&#xff0c;然后点击翻译 可以选择打开译文或者下载译文&#xff0c;下载译文会下载到电脑上&#xff0c;打开译文会在浏览器打开。

安卓调试桥ADB

Logcat 命令行工具 | Android Studio | Android Developers 什么是ADB ADB 全称为 Android Debug Bridge &#xff0c;是 Android SDK &#xff08;安卓的开发工具&#xff09;中的一个工具&#xff0c;起到调试桥的作用&#xff0c;是一个 客户端 - 服务器端程序 。其中 …

npm install的时候一直卡在sill idealTree buildDeps没有反应

描述&#xff1a;npm install的时候一直卡在sill idealTree buildDeps没有反应 第一步&#xff1a;清缓存 npm cache clean --force 第二步&#xff1a;换镜像 npm config set registry https://registry.npmmirror.com检查是否安装成功 npm config get registry第三步&…