Spring注解开发详解

article/2025/11/10 17:18:17

学习基于注解的 IOC 配置,大家脑海里首先得有一个认知,即注解配置和 xml 配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。 关于实际的开发中到底使用xml还是注解,每家公司有着不同的使用习惯 , 所以这两种配置方式我们都需要掌握。

一、注解开发定义bean

注解说明
@Component使用在类上用于实例化Bean
@Controller使用在web层类上用于实例化Bean
@Service使用在service层类上用于实例化Bean
@Repository使用在dao层类上用于实例化Bean

1、Spring 2.5版本

注意:
在2.5版本中使用注解进行开发时,需要在application.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法。
在这里插入图片描述

1.1、使用Component定义bean

//dao层接口
public interface UserDao {void show();
}//dao层实现类
@Component //通过类型定义bean(只有一个实现类建议使用)
// @Component("ud") //通过id定义bean
public class UserDaoImpl implements UserDao {@Overridepublic void show() {System.out.println("这是userDao的方法");}
}

1.2、核心配置文件中通过组件扫描加载bean

<context:component-scan base-package="com.liming"/>

1.3、Spring提供@Component注解的三个衍生注解

// 持久层
@Repository
public class UserDaoImpl implements UserDao {@Overridepublic void show() {System.out.println("这是userDao的方法");}
}// 业务层
@Service
public class UserServiceImpl implements UserService {@Overridepublic void show() {System.out.println("这是userDao的方法");}
}// 表现层
@Controller
public class UserController {
}

1.4、XML与注解配置的对应关系
在这里插入图片描述

2、纯注解开发(Spring 3.0版本)

Spring 3.0 开启了纯注解开发模式,使用Java类替代配置文件,开启了Spring快速开发赛道

注解说明
@Configuration用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解,作用等价于applicationContext.xml 配置文件。
@ComponentScan用于指定 Spring在初始化容器时要扫描的包。 作用和在 Spring 的 xml 配置文件中的 <context:component-scan base-package=“com.liming”/>一样

2.1、Java类代替Spring核心配置文件
在这里插入图片描述

2.2、初始化容器对象

读取Spring核心配置文件初始化容器对象切换为读取Java配置类初始化容器对象

ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

二、依赖注入

注解说明
@Value注入简单类型
@Autowired自动按照类型注入。当使用注解注入属性时,set 方法可以省略。它只能注入其他 bean 类型。当有多个类型匹配时,使用要注入的对象变量名称作为 bean 的 id,在 spring 容器查找,找到了也可以注入成功。找不到就报错。 如果IOC容器当中有多个接口得实现类, 首先根据类型自动装配, 然后再根据名称自动装配。
@Qualifier结合@Autowired一起使用用于根据名称进行依赖注入
@Resource相当于@Autowired+@Qualifier,按照名称进行注入,是java提供的,不是框架提供的

2.1、使用@Autowired注解开启自动装配模式(按类型)

//@Component
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Overridepublic void show() {userDao.show();}
}

在这里插入图片描述
2.2、使用@Qualifier注解开启指定名称装配bean

//@Component
@Service
public class UserServiceImpl implements UserService {@Autowired@Qualifier("ud")private UserDao userDao;@Overridepublic void show() {userDao.show();}
}

注意:@Qualifier注解无法单独使用,必须配合@Autowired注解使用

2.3、使用@Resource注解开启指定名称装配bean

//@Component
@Service
public class UserServiceImpl implements UserService {@Resource(name = "ud")private UserDao userDao;@Overridepublic void show() {userDao.show();}
}

2.4、使用@Value注解注入普通类型

@Repository
public class UserDaoImpl implements UserDao {@Value("字符串")private String str;public void addUser() {System.out.println(str);}
}

三、加载properties文件

注解说明
@PropertySource用于加载xxx.properties 文件中的配置 结合@Value(“${}”) 取配置文件的值。
@Configuration
@ComponentScan("com.liming")
@PropertySource("classpath:jdbc.properties")
public class SpringConfig {
}

注意:路径仅支持单一文件配置,多文件请使用数组格式配置,不允许使用通配符*

四、第三方bean管理

4.1、使用独立的配置类管理第三方bean

在这里插入图片描述

4.2、将独立的配置类加入核心配置

注解说明
@Import用于导入其他配置类

在这里插入图片描述
注意:此注解只能添加一次,多个数据请用数组格式

五、第三方bean依赖注入

5.1、简单类型依赖注入
在这里插入图片描述

5.1、引用类型依赖注入

在这里插入图片描述

注意:引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象

六、生命周期注解

注解说明
@PostConstruct使用在方法上标注该方法是Bean的初始化方法
@PreDestroy使用在方法上标注该方法是Bean的销毁方法
//@Component
@Repository
public class UserDaoImpl implements UserDao {@PostConstructpublic void init(){System.out.println("userDao被初始化了");}@Overridepublic void show() {System.out.println("这是userDao的方法");}@PreDestroypublic void destroy(){System.out.println("userDao被销毁了");}
}

七、作用范围注解

注解说明
@Scope标注Bean的作用范围,scope取值singleton prototype request session globalsession

总结(XML配置对比注解配置)

在这里插入图片描述


http://chatgpt.dhexx.cn/article/qkH8iwS9.shtml

相关文章

spring注解注入详解

1、Spring配置 <?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.springframe…

Spring @Order注解详解

注解Order的作用是定义Spring容器加载Bean的顺序。 源码 Retention(RetentionPolicy.RUNTIME) Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD}) Documented public interface Order {/*** The order value.* <p>Default is {link Ordered#LOWEST_PR…

Spring注解详解:@ComponentScan自动扫描组件使用

目录 无注解方式component-scan使用 注解方式ComponentScan使用 ComponentScan的扫描规则 无注解方式component-scan使用 之前&#xff0c;我们需要扫描工程下一些类上所标注的注解&#xff0c;这些常用注解有&#xff1a; Controller,Service,Component,Repository 通过在…

Spring注解详解

一、Spring注解驱动开发入门 spring在2.5版本引入了注解配置的支持&#xff0c;同时从Spring 3版本开始&#xff0c;Spring JavaConfig项目提供的许多特性成为核心Spring框架的一部分。因此&#xff0c;可以使用Java而不是XML文件来定义应用程序类外部的bean。在这里面官方文档…

Spring常用注解的详细介绍(包你学明白)

目录 1. 为什么要使用注解&#xff1f; 2. 什么是注解&#xff1f; 3. 在Spring中使用注解的前期准备 4. Component注解的详细介绍 5. Value注解的详解介绍 6. Autowired注解的详细介绍 7. Resource注解的详细介绍 8. 怎么选择基于xml还是基于注解的方式创建对象并赋值呢…

Spring中的注解详细介绍

注&#xff1a;标颜色的需要重点掌握 一、Spring原始注解&#xff1a; Spring原始注解主要代替<bean>标签的配置。 1. Component 说明&#xff1a;使用在类上用于实例化Bean 2. Repository 说明&#xff1a;使用在dao层类上用于实例化…

isnumeric_Python字符串isnumeric()

isnumeric Python String isnumeric() function returns True if all the characters in the string are numeric, otherwise False. If the string is empty, then this function returns False. 如果字符串中的所有字符均为数字&#xff0c;则Python String isnumeric&#x…

isdigit isdecimal isnumeric 区别

一、代码测试 num "1" #unicode num.isdigit() # True num.isdecimal() # True num.isnumeric() # Truenum "1" # 全角 num.isdigit() # True num.isdecimal() # True num.isnumeric() # Truenum b"1" # byte num.isdigit() # True n…

StringUtils.isNumeric使用

网上查"java 判断字符串为数字"阅资料&#xff0c;大部分资料都在讲字符串转为整数的情况&#xff0c;很少资料提及关于负数和小数的情况&#xff0c;最终决定采用StringUtils.isNumberic这个方法差别&#xff0c; 在测试导出时发现有报错&#xff0c;用debug模块一…

Java 字符串的数字校验:isNumeric,isNumericSpace和正则表达式,对比分析

导读 数字类型的判断是项目里常见的场景&#xff0c;相比一大串的非空&#xff0c;instanceof 以及大于小于0的判断&#xff0c;我更倾向于使用工具类 StringUtils 或者 正则表达式 来实现功能&#xff0c;追求代码的简洁和高效。 你可能需要的博客&#xff1a; 正则表达式预编…

StringUtils.isNumeric(str)

在项目中遇到一处bug&#xff0c;调试的结果竟然是StringUtils.isNumeric(String str) 在捣鬼&#xff08;采用的是org.apache.commons.lang.StringUtils&#xff09;&#xff0c;下面的代码是判断一个参数非空&#xff0c;且为整数&#xff1a; if(StringUtils.isNumeric(str)…

第六十七章 SQL函数 ISNUMERIC

文章目录 第六十七章 SQL函数 ISNUMERIC大纲参数描述示例 第六十七章 SQL函数 ISNUMERIC 测试有效数字的数值函数。 大纲 ISNUMERIC(check-expression)参数 check-expression - 要计算的表达式。 ISNUMERIC返回SMALLINT数据类型。 描述 ISNUMERIC计算check-expression并…

isnumeric( )函数用法

isnumeric( )还是一个很实用的函数&#xff0c;在算法题目里面应该会有比较大的作用。 检测字符串是否只由数字组成&#xff0c;如果字符串中只包括数字&#xff0c;就返回Ture&#xff0c;否则返回False。 华为的一道算法题&#xff1a; 读入一个字符串str&#xff0c;输出字…

MAE:视觉自监督2021(原理+代码)

文章目录 前言一、MAE原理遮住95%的像素后&#xff0c;仍能还原出物体的轮廓&#xff0c;效果如图&#xff1a; 二、MAE测试代码1.models_mae.py1.1 self.forward_encoder1.2 self.forward_decoder1.3 loss self.forward_loss(imgs, pred, mask) 2.run_one_image 三、MAE升级版…

​一文看尽MAE最新进展!恺明的MAE已经提出大半年,目前发展如何?

©PaperWeekly 原创 作者 | Jason研究方向 | 计算机视觉 写在前面 自去年 11 月份恺明大神提出 MAE 来&#xff0c;大家都被 MAE 简单的实现、极高的效率和惊艳的性能所吸引。近几个月&#xff0c;大家也纷纷 follow 恺明的工作&#xff0c;在 MAE 进行改进&#xff08;如…

一文解读Masked Autoencoder(MAE)

前言 论文链接&#xff1a;https://arxiv.org/pdf/2111.06377.pdf   跟李沐学AI&#xff1a;https://www.bilibili.com/video/BV1sq4y1q77t?spm_id_from333.999.0.0   如果说Vision Transformer是Transformer在CV领域的拓展&#xff0c;那么Masked Autoencoder就是BERT在C…

matlab mse mae,回归评价指标MSE、RMSE、MAE、R-Squared

前言 分类问题的评价指标是准确率,那么回归算法的评价指标就是MSE,RMSE,MAE、R-Squared。下面一一介绍 均方误差(MSE) MSE (Mean Squared Error)叫做均方误差。看公式 image.png 这里的y是测试集上的。 用 真实值-预测值 然后平方之后求和平均。 猛着看一下这个公式是不是觉…

何凯明最新一作MAE(mask掉图片的部分信息也能重建识别)

导读 凯明出品&#xff0c;必属精品。没有花里胡哨的修饰&#xff0c;MAE就是那么简单的强大&#xff0c;即结构简单但可扩展性能强大。MAE通过设计一个非对称的编码解码器&#xff0c;在预训练阶段&#xff0c;通过高比例的掩码原图&#xff0c;将可见部分输入到编码器中&…

李沐精读论文:MAE 《Masked Autoencoders Are Scalable Vision Learners》

论文&#xff1a;Masked Autoencoders Are Scalable Vision Learners 别再无聊地吹捧了&#xff0c;一起来动手实现 MAE(Masked Autoencoders Are Scalable Vision Learners) 玩玩吧&#xff01; - 知乎 参考博文&#xff1a;MAE 论文逐段精读【论文精读】 - 哔哩哔哩 神洛华…

从Transformer到ViT再到MAE

从Transformer到VIT再到MAE 引言Transfomer提出的背景模型架构具体细节Add&NormAttention&#xff1a;Multi-Head Attention自注意力机制&#xff08;self attention&#xff09;Positional Encoding ViT提出的背景&#xff1a;模型架构&#xff1a;具体细节&#xff1a;维…