当前位置: 首页 > news >正文

Spring中的注解装配

1.关于Spring中的注解装配的作用

Spring中的注解装配简化了xml中bean的配置,大大提高了开发效率。

原本我们想在spring容器中使用某个类需要先在xml中配置该类的bean。使用注解后可以直接通过包扫描的方式自动在我们调用类时自动装配。

例如:

当我们想要使用UserDaO实现类时需要再Xml配置文件上添加如下配置

<bean id="userDao" class="com.yc.dao.impl.UserDaoImpl" />

 但是到我们在类上添加注解:@complicate一样可以到达上述xml的效果

@Repository("userDao")
public class UserDaoImpl implements UserDao {@Overridepublic void getUser() {System.out.println("注解测试==>、、、");return ;}
}

xml中的

<bean class="com.xxxx" />就相当于===》@Repository()

<bean id="userDao"  /> 就箱单于==》@Repository("userDao")

但为了可以识别到我们的注解需要再xml中配置包扫描:

    <context:component-scan base-package="com.yc"/>//此处的包要写成自己对应的项目包

如此一来bean的配置也就大大简化,提高了开发效率。

2.Ioc中的注解:

注解说明
@Component使用在类上用于实例化Bean 相当于 <bean></bean>
@Controller使用在web层类上用于实例化Bean
@Service使用在service层类上用于实例化Bean
@Repository使用在dao层类上用于实例化Bean

需要注意的是:使用注解时,当类级别注解不指定具体的 bean 名称时,Spring 会使用类的名称(byname)作为 bean 的名称,比如UserDaoImpl的类加上注解@Repository,而不设置注解参数时,spring会默认以userDaoImpl作为该bean的 id。所以在使用过程中应该注意。

例如:

你会发现注解不设置参数时

@Repository 
public class UserDaoImpl implements UserDao { private User user; public void setUser(User user){ this.user=user; }@Override public void getUser() { System.out.println("注解测试==>、、、"); return ; } 
}

 当我通过测试类去调用时,控制台就会报错,显示找不到bean。

测试类如下:

    @Testpublic void Springtest2(){ClassPathXmlApplicationContext cac=new ClassPathXmlApplicationContext("springConfig.xml");UserDao userDao=cac.getBean(UserDaoImpl.class);userDao.getUser();System.out.println("````");}

而加上(“userDao”)便可以找到

@Repository("userDao") 
public class UserDaoImpl implements UserDao { private User user; public void setUser(User user){ this.user=user; }@Override public void getUser() { System.out.println("注解测试==>、、、"); return ; } 
}

原因:

在 Spring 框架中,@Repository 注解用于标识一个类属于数据访问层(DAO)的组件。默认情况下,Spring 会按照类型来查找并创建相应的 bean 实例。

在示例中,当类级别注解 @Repository 不指定具体的 bean 名称时,Spring 使用类的名称(byname)作为 bean 的名称此处的例子即以userDaoImpl作为其名称而不是以userDao为名称,所以在容器扫描识别时才会显示找不到userDao的bean,容器只扫描到userDaoImpl的bean。因此,如果你的类名为 UserDaoImpl,那么根据默认的查找规则,Spring 将会寻找一个名为 "userDaoImpl" 的 bean。

对于第一个示例中的类:

@Repository
public class UserDaoImpl implements UserDao {// ...
}

如果未在 @Repository 注解中指定 bean 的名称,Spring 默认会使用类名小写(camelCase)。因此,它将在上下文中查找名为 "userDaoImpl" 的 bean。如果找不到与该名称匹配的 bean,就会出现找不到 bean 的错误。

而对于第二个示例中的类:

java

@Repository("userDao")
public class UserDaoImpl implements UserDao {// ...
}

@Repository 注解指定了具体的 bean 名称为 "userDao",这意味着 Spring 在上下文中查找名为 "userDao" 的 bean,并成功创建了实例。

综上所述,注解 @Repository 的查找方式实际上是基于 bean 的名称(byname)进行查找的。你可以通过显式指定 @Repository 注解的值,来定制 bean 名称并避免找不到 bean 的错误。

3.DI注解

注解说明
@Autowired使用在字段上用于根据类型依赖注入,相当于 <property></property> ,根据类型注入。底层使用反射
@Qualifier结合@Autowired一起使用,不能单独使用。根据id查找同类型下的实例
@Resource相当于@Autowired+@Qualifier,按照名称进行注入

相关文章:

Spring中的注解装配

1.关于Spring中的注解装配的作用 Spring中的注解装配简化了xml中bean的配置&#xff0c;大大提高了开发效率。 原本我们想在spring容器中使用某个类需要先在xml中配置该类的bean。使用注解后可以直接通过包扫描的方式自动在我们调用类时自动装配。 例如&#xff1a; 当我们想…...

深度优先搜索|130, 200

深度优先搜索|130. 被围绕的区域, 200. 岛屿数量 被围绕的区域岛屿数量 被围绕的区域 这个题应该是从外到里做&#xff0c;我们应该去找和外圈的’O’相通的所有’O’&#xff0c;而不是去找内圈被包围的’O’。 所以我们做的就是从边界的’O’出发&#xff0c;把和他相连的所…...

go-resty

一. go-resty一个优秀的 HTTP 客户端库 go-resty超时控制示例 go-resty自动重示例 go-resty TLS示例 go-resty 与连接池 go-resty 与代理 go-resty 与认证 总结go-resty中提供的API 一. go-resty一个优秀的 HTTP 客户端库 在 Golang 标准库中提供了net/http 具体参考该文档 这…...

香港服务器速度不稳定的原因有哪些

香港服务器速度不稳定的原因有哪些 网络连接的稳定性和速度对于个人和企业来说至关重要。然而&#xff0c;许多用户经常遇到香港服务器速度不稳定的问题&#xff0c;有时候快&#xff0c;有时候慢&#xff0c;这给他们的在线体验和工作效率带来了困扰。本文将探讨香港服务器速…...

企业架构NOSQL数据库之MongoDB

目录 一、背景描述及其方案设计 (一)业务背景描述 &#xff08;二&#xff09;模拟运维设计方案 二、Mongodb介绍 &#xff08;一&#xff09;nosql介绍 &#xff08;二&#xff09;产品特点 1、存储性 2、 效率性 3、结构 三、安装和配置 &#xff08;一&#xff09…...

鸟哥马哥共叙Linux发展

导读北京时间3月28日&#xff0c;由51CTO学院和人民邮电出版社信息技术分社联合举办的[开放见远]“鸟哥”大陆行Linux技术沙龙在位于北京市西三环久凌大厦的51CTO学院举行。 台湾著名Linux网站——“鸟哥的Linux私房菜”站长蔡德明&#xff0c;51CTO学院讲师马哥教育创始人马永…...

OpenCV中常用算子

一、图像运算 Mat src, src1, src2, dst;// 图像运算 加 减 乘 除cv::add(src1, src2, dst); // 相加&#xff1a;src1src2cv::scaleAdd(src1, 1.0, src2, dst); // 相加&#xff1a;1.0*src1src2cv::addWeighted(src1, 0.3, src2, 0.7,…...

Android 11.0 系统限制上网系列之iptables用IOemNetd实现app某个时间段禁止上网的功能实现

1.前言 在11.0的系统rom定制化开发中,对于系统限制网络的使用,在system中netd网络这块的产品需要中,会要求设置app某个时间段禁止上网的功能, liunx中iptables命令也是比较重要的,接下来就来在IOemNetd这块实现app某个时间段禁止上网的的相关功能,就是在 系统中只能允许…...

【JavaSE】面向对象编程思想之继承

【本节目标】 1. 继承 2. 组合 目录 1. 为什么需要继承 2. 继承概念 3. 继承的语法 4. 父类成员访问 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. 子类构造方法 7. super和this 8. 再谈初始化 9. protected 关键字 10. 继承方式…...

Golang make和new的区别

make 和 new new函数 作用 分配内存设置零值返回指针 eg&#xff1a; type Student struct{name stringage int }func main(){//new 一个内建类型num : new(int)fmt.Println(*num) //打印&#xff1a;0//new一个自定义类型s : new(Student)s.name "yx"fmt.Prin…...

(前后端交互式)Ajax上传图片 + 更换背景图片

前后端交互图片文件 上传-图片 注意1&#xff1a;上传的图片必须在2MB以内 注意2&#xff1a;服务器端oss&#xff08;阿里云对象存储&#xff09;为了安全性&#xff0c;图片url网址不能直接在浏览器地址栏访问 请用img/背景图方式进行使用 上传图片的代码实现 \* 目标&#…...

自媒体常见玩法

有声小说转成视频 题材来源 喜马拉雅 工具 https://trace.moe/ 33台词找台词 文字转视频 题材来源 小说类APP书籍 音乐转视频...

【react】react生命周期钩子函数:

文章目录 一、生命周期概念:二、生命周期:三、挂载阶段&#xff08;constructor > render > componentDidMount&#xff09;&#xff1a;四、更新阶段&#xff08;render > componentDidUpdate&#xff09;&#xff1a;五、卸载阶段&#xff08;componentWillUnmount …...

CRM系统哪些功能可以个性化定制?

不同的企业有着不同的业务流程和需求&#xff0c;因此在选型时就需要一款可以个性化定制的CRM系统。下面说说可以个性化定制的CRM系统的功能和优势。 如何实现个性化定制&#xff1f; Zoho CRM支持个性化定制&#xff0c;您可以创建自定义功能模块、字段以及业务流程&#xf…...

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验二 LED闪烁

目录 前言 一、原理图及知识点介绍 二、代码分析 知识点四&#xff1a;delay(u16 i)这个函数为什么i1时&#xff0c;大约延时10us&#xff1f; 前言 已经是第二个实验了&#xff0c;上一个实验是点亮第一个LED灯&#xff0c;这个实验是LED的闪烁。 一、原理图及知识点介绍…...

PaperEdge 文档图像矫正

效果 地址&#xff1a; https://github.com/cvlab-stonybrook/PaperEdge...

入门NLTK:Python自然语言处理库初级教程

NLTK&#xff08;Natural Language Toolkit&#xff09;是一个Python库&#xff0c;用于实现自然语言处理&#xff08;NLP&#xff09;的许多任务。NLTK包括一些有用的工具和资源&#xff0c;如文本语料库、词性标注器、语法分析器等。在这篇初级教程中&#xff0c;我们将了解N…...

Android 死机问题学习笔记

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、死机系统简图二、死机的可能原因三、死机问题需要分析哪些数据四 、Java Backtrace 分析五、常见 Java backtrace 举例六、Native Backtrace七、Ke…...

企业内网终端安全无客户端准入控制技术实践

终端无代理/无客户端准入控制技术因其良好的用户体验而倍受创新企业的青睐。无代理/无客户端准入控制技术&#xff0c;顾名思义&#xff0c;是一种在网络中对终端实施访问控制的方法&#xff0c;无需依赖特定的客户端软件。 不同于银行、医院等传统行业的终端准入控制需求&…...

Android 开发代码规范

一. AndroidStudio开发工具规范 使用最新的稳定版本.统一文件的编码格式为utf-8. 清除每个类里面的无效的import导包.代码样式统一,比如&#xff0c;tab缩进4个空格&#xff0c;或者 tab size等如果没有特殊情况使用默认的配置即可。每行字数每行字符数不得超过 160 字符&…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...