【Spring——注解实现自动装配】

使用注解实现自动装配

jdk1.5支持的注解, Spring2.5就支持注解了~
The introduction of annotation-based configuration raised the question of whether this approach is “better” than XML
要使用注解须知:

  1. 导入约束 [必须要有context约束]
  2. 配置注解的支持: context:annotation-config/
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解的支持不加无效--><context:annotation-config/></beans>

@Autowired注解

直接在属性上用即可~ 也可以在set方式上使用~
使用Autowired我们可以不用编写Set方法了, 前提是你这个自动装配的属性IOC (Spring)容器中存在, 且符合名字byName

注解使用反射技术来实现的

科普:

@Nullable   字段标记了这个注解, 说明这个字段可以为Null
public @interface Autowired {boolean required() default true; //布尔值默认为真
}

测试代码:

public class People {
//    如果显示定义了Autowired的required属性为false, 说明这个对象可以为Null,否则不允许为空
@Autowired(required = false)private Cat cat;
@Autowiredprivate Dog dog;private String name;

如果@Autowired自动装配的环境比较复杂, 自动装配无法通过一个注解[@Autowired]完成的时候, 我们可以使用 @Qualifer(value=“xxx”)去配合@Autowired的使用, 指定一个唯一的bean对象注入

import io.micrometer.common.lang.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;public class People {
//    如果显示定义了Autowired的required属性为false, 说明这个对象可以为Null,否则不允许为空
@Autowired(required = false)
@Qualifier(value = "cat")private Cat cat;
@Autowired
@Qualifier(value = "dog222")private Dog dog;private String name;

这些都是Spring的注解没有导入Spring是用不了的

@Resource注解

如果不用这些注解我们还有一个基于Java的注解 @Resource 用它也可以实现自动装配

这个注解是一个集合体, 它会通过名字先去查找, 名字找不到的情况下它会通过类型去查找 如果两个都找不到的情况下它才会报错

这个注解有一个name默认为空我们可以去给它指定
比如场景如下:

public class People {
//    如果显示定义了Autowired的required属性为false, 说明这个对象可以为Null,否则不允许为空
@Resource(name = "cat2")private Cat cat;
@Resourceprivate Dog dog;private String name;
<!--注解的支持不加无效--><context:annotation-config/><bean id="cat1" class="com.jean.pojo.Cat"/><bean id="cat2" class="com.jean.pojo.Cat"/><bean id="dog" class="com.jean.pojo.Dog"/><bean id="people" class="com.jean.pojo.People"/></beans>

运行后他开始找—>它通过名字id="找不到对应的"他又开始继续找—>有两个Cat类型这样也不行他不知道拿那个就会报错

解决方法: 要么把他的注解改为一个唯一的,
要么去注解指定一个类
@Resource(name = “cat2”)

public class People {
//    如果显示定义了Autowired的required属性为false, 说明这个对象可以为Null,否则不允许为空
@Resource(name = "cat2")private Cat cat;
@Resourceprivate Dog dog;private String name;

虽然说自动装配的注解有两个, 但是一般最常用的是@Autowired一般@Autowired就够了, 因为我们知道所有的东西是单例的一般设置一个就够用了, 在大多数网站里最常见就是@Autowired注解并不会去使用@Resource但是@Resource功能会强大一点, 效率会差那么一丢丢

小结:
@Resource 和 @Autowired 的区别:

相同点:

  • 都是用来自动装配的, 都可以放在属性字段上

不同点:

  • @Autowired 通过byType的方式实现,而且必须要求这个对象存在, 不然就空指针了, 虽然可以手动@Nullable让它字段为空但是还是解决不了它本质的问题 [常用]

  • @Resource 默认通过byName的方式实现 , 如果找不到名字, 则通过byType实现~~如果两个都找不到就完了,就报错 [常用]

  • @Resource是@Autowired和@Qualifier的集合体

  • 执行顺序不同:

    • @Autowired 通过byType的方式实现
    • @Resource 默认通过byName的方式实现 , 如果找不到名字, 则通过byType实现

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

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

相关文章

【学习笔记】计算机视觉深度学习网络模型

这是本人学习计算机视觉CV领域深度学习模型的学习的一点点学习笔记&#xff0c;很多片子没有完成&#xff0c;可以作为学习的参考~

springboot免安装整合Opencv兼容windows和linux

OpenCV(开源计算机视觉库)是一个开源的计算机视觉和机器学习软件库,提供了丰富的功能和工具,用于处理图像和视频数据。其主要功能包括但不限于以下几个方面: 图像处理:包括图像加载、保存、缩放、裁剪、旋转、平移、色彩空间转换(如RGB、HSV等)、图像平滑(模糊、滤波)…

Linux dmesg命令教程:深入理解内核消息(附案例详解和注意事项)

Linux dmesg命令介绍 dmesg&#xff08;display message&#xff09;命令用于查看和控制内核环形缓冲区。它可以在排查内核或硬件问题时提供很大的帮助。这些消息包含有关硬件检测、设备初始化以及内核可能遇到的任何潜在问题的重要信息。 Linux dmesg命令适用的Linux版本 d…

灵神笔记(1)----动态规划篇

文章目录 介绍动态规划入门&#xff1a;从记忆化搜索到递推打家劫舍递归记忆化递归递推滚动变量 背包0-1 背包递归写法记忆化递归 目标和记忆化搜索递推两个数组一个数组 完全背包记忆化递归搜索 零钱兑换记忆化递归递推 背包问题变形[至多|恰好|至少] 最长公共子序列记忆化搜索…

微信小程序开发系列(二十)·wxml语法·setData()修改对象类型数据、ES6 提供的展开运算符、delete和rest的用法

目录 1. 新增单个、多个属性 1.1 新增单个属性 1.2 新增多个属性 2. 修改单个、多个属性 2.1 修改单个属性 2.2 修改多个属性 3. 优化 3.1 ES6 提供的展开运算符 3.2 Object.assign()将多个对象合并为一个对象 4. 删除单个、多个属性 4.1 删除单个属性 …

搬运机器人助力制造业转型升级

随着传统制造业的转型升级&#xff0c;智能化和多样化成为行业发展的新趋势。在这个过程中&#xff0c;富唯智能搬运机器人作为智能工厂的重要搬运机器人&#xff0c;展现出了卓越的性能和适应性。 它不仅能够应对各种材料、形状和重量的搬运装卸需求&#xff0c;还能与智能物理…

计算机网络面经-UDP为什么比TCP要更快

先说结论&#xff1a; UDP没有流量控制、拥塞控制、没有握手、没有成功确认&#xff0c;一个数据包发过去就不管。TCP开销大一点 具体分析&#xff1a; 这句话准确地描述了UDP&#xff08;User Datagram Protocol&#xff09;和TCP&#xff08;Transmission Control Protoco…

Python Flask 打包成exe 心得体会

一、安装pyinstaller pip install pyinstaller 二、打包主文件 确认需要打包的py文件名&#xff0c; 如app.py在Pycharm输入如下指令&#xff0c;针对app.py进行打包 python -m pyInstaller -F app.py 三、整个项目的所有文件打包 确定主函数为app.py&#xff0c;然后在c…

Go语言中的slice:灵活且强大的数据结构

Go语言的slice是一个非常灵活且强大的数据结构&#xff0c;它提供了对数组的动态大小视图。在本文中&#xff0c;我们将探讨slice的基本概念、操作和一些常见的陷阱&#xff0c;以帮助你更好地理解和使用它。 基本概念 slice是对底层Go数组的抽象表示&#xff0c;它可以动态地…

跨链桥的类型总结/相关的名词解释

首先&#xff0c;这是一个会持续更新的文章&#xff0c;我会不断把自己了解到的跨链桥名词解释更新在这里。 跨链桥类型 基于传输方式分类&#xff1a; Lock and Mint&#xff1a;在一条链上锁定资产&#xff0c;在另一条链上铸造等价资产liqidity pool&#xff1a;在不同链…

数字化转型导师坚鹏:金融科技咨询方法论

金融科技咨询方法论 ——方法、做法、演法、心法 课程背景&#xff1a; 数字化转型背景下&#xff0c;很多机构存在以下问题&#xff1a; 不知道先进的金融科技咨询方法论&#xff1f; 不知道如何运作金融科技咨询项目&#xff1f; 不知道如何汇报咨询项目关键成果&…

自定义参数校验器(有用)

一、前言 因为我想对于参数的校验制定自己的规则&#xff0c;所以要自定义一个校验器。 好的&#xff0c;开始启动吧 二、元神启动&#xff01; 1. springboot项目引入相关依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId&…

第五十一回 李逵打死殷天赐 柴进失陷高唐州-AI发展历程和常用框架

朱仝说只要杀了李逵就上梁山&#xff0c;柴进就劝李逵先在庄上住一段时间&#xff0c;先让朱仝、雷横和吴用回了梁山。 李逵在柴进庄上住了一个月&#xff0c;碰到柴进的叔叔柴皇城病重来信叫他去一趟&#xff0c;于是李逵就随着柴进去了高唐州。 柴皇城被殷天锡气死&#xf…

世界级通讯社发稿-法新社海外发稿渠道-大舍传媒

世界级通讯社发稿-法新社海外发稿渠道-大舍传媒 美联社&#xff1a;全球最大的通讯社之一 美联社&#xff08;Associated Press&#xff09;是全球最大的通讯社之一&#xff0c;成立于1846年&#xff0c;总部位于美国纽约。该社拥有一支庞大的全球新闻团队&#xff0c;涵盖了…

SpringBoot集成Swagger3.0

一&#xff1a;前言   Swagger 是一个 RESTful API 的开源框架&#xff0c;它的主要目的是帮助开发者设计、构建、文档化和测试 Web API。Swagger 的核心思想是通过定义和描述 API 的规范、结构和交互方式&#xff0c;以提高 API 的可读性、可靠性和易用性&#xff0c;同时降…

AI推介-大语言模型LLMs论文速览(arXiv方向):2024.03.01-2024.03.05

文章目录~ 1.Language Guided Exploration for RL Agents in Text Environments2.Word Importance Explains How Prompts Affect Language Model Outputs3.Knowledge Graphs as Context Sources for LLM-Based Explanations of Learning Recommendations4.Data Augmentation us…

mysql8安装配置(最新版)

目录 一、下载mysql8 二、安装mysql8 三、配置mysql 一、下载mysql8 下载链接&#xff1a;https://pan.quark.cn/s/58d9072e51c4 二、安装mysql8 双击msi文件 选择custom 根据所需选择组件 修改安装路径 选中execute&#xff0c;安装&#xff0c;弹出提示安装VS的提示框之后…

MYSQL5.7报1205 - Lock wait timeout exceeded; try restarting transaction

简介 今天使用navicate操作添加时&#xff0c;mysql报错误&#xff0c;错误如下 原因 这个问题的原因是在mysql中产生了事务A&#xff0c;执行了修改的语句&#xff0c;比如&#xff1a; update t1 set aget18 where id1;此时事务并未进行提交&#xff0c;事务B开始运行&am…

自学高效备考2024年AMC10:2000-2023年1250道AMC10真题解析

我们今天继续来随机看5道AMC10真题&#xff0c;以及详细解析&#xff0c;这些题目来自1250道完整的官方历年AMC10真题库。通过系统研究和吃透AMC10的历年真题&#xff0c;参加AMC10的竞赛就能拿到好名次。 即使不参加AMC10竞赛&#xff0c;初中和高中数学一定会学得比较轻松、…

PTA L2-001 紧急救援

作为一个城市的应急救援队伍的负责人&#xff0c;你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候&#xff0c;你的任务是带领你的…