Spring 中常用注解原理剖析

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

Spring 框架作为 Java 领域广泛使用的企业级框架,凭借其简洁优雅的编程方式,以及丰富的功能和生态,一直备受开发者们的喜爱。

在 Spring 框架中,注解是实现代码简洁、模块化、可配置的关键技术之一。

本文将对 Spring 中常用注解的原理进行剖析,并通过实际案例展示如何使用这些注解。

一、注解原理简介

  • 在 Java 编程中,注解是一种元数据,用于向编译器和运行时环境提供额外的信息。

  • Spring 框架利用 Java 的注解机制,实现了依赖注入(DI)、面向切面编程(AOP)、声明式事务管理等功能,大大简化了 Java 企业级应用的开发。

  • 在 Spring 中,注解的原理主要涉及到三个方面:

  1. 注解定义:通过 Java 提供的 @interface 语法定义注解。

  1. 注解使用:将定义好的注解应用到类、方法、字段等地方。

  1. 注解解析:通过反射机制,在运行时读取注解的信息,并根据注解的定义来执行相应的逻辑。

接下来,我们将针对 Spring 中常用的几个注解,详细剖析其原理。

二、常用注解剖析

1,@Component

@Component 注解是 Spring 中用于标识一个类作为组件的注解,这意味着 Spring 容器会自动扫描到这个类,并将其实例化为一个 Bean。

@Component 注解是 @Service@Controller@Repository 注解的基础注解。

原理剖析

  • 当 Spring 容器启动时,会通过 ClassPathScanningCandidateComponentProvider 类扫描类路径下的所有类,然后检查这些类上是否有 @Component 注解。

  • 如果有,Spring 容器会将这个类实例化为一个 Bean,并加入到 IoC 容器中。

实际案例

@Component
public class UserService {
   //...
}

上述代码中,UserService 类被标记为一个组件,Spring 容器会自动创建并管理一个 UserService 的实例。

2,@Autowired

@Autowired 注解用于自动装配 Bean 之间的依赖关系。它可以应用在字段、构造方法和普通方法上。

原理剖析

  • Spring 容器在创建 Bean 实例后,会通过 AutowiredAnnotationBeanPostProcessor 类处理 @Autowired 注解。

  • 具体而言,它会查找与被注解字段或方法参数类型匹配的 Bean,并自动注入相应的依赖。

实际案例

@Component
public class UserController {
   private UserService userService;
   @Autowired
   public UserController(UserService userService) {
       this.userService = userService;
  }
}

上述代码中,UserController 中的 userService 字段被 @Autowired 注解修饰,Spring 容器会自动注入一个 UserService 的实例。

3,@RequestMapping

@RequestMapping 注解用于将 HTTP 请求映射到控制器的处理方法上。它可以应用在类和方法上,用于处理不同的 URL 请求。

原理剖析

  • Spring 容器在启动时,会扫描所有标注有 @Controller 注解的类,并解析其中所有的 @RequestMapping 注解。

  • 当接收到一个 HTTP 请求时,Spring 容器会根据请求的 URL 和请求方法,找到对应的处理方法,并执行相应的业务逻辑。

实际案例

@Controller
@RequestMapping("/user")
public class UserController {
   @RequestMapping("/login")
   public String login() {
       //...
  }
}

上述代码中,UserController 类被标注为一个控制器,@RequestMapping 注解指定了 /user 路径。login() 方法被 @RequestMapping 注解修饰,用于处理 /user/login 的请求。

4,@Transactional

@Transactional 注解用于声明式事务管理,它可以应用在类和方法上。

当一个方法被标记为 @Transactional 注解时,Spring 容器会在方法执行前开启一个事务,并在方法执行后根据执行结果提交或回滚事务。

原理剖析

Spring 的事务管理是基于 AOP 技术实现的。当一个类或方法被标记为 @Transactional 注解时,Spring 容器会通过 TransactionInterceptor 类生成一个代理对象,将事务逻辑织入到代理对象的方法中。

实际案例

@Service
public class UserService {
   @Autowired
   private UserDao userDao;
   @Transactional
   public void updateUser(User user) {
       userDao.updateUser(user);
  }
}

上述代码中,UserService 类中的 updateUser() 方法被 @Transactional 注解修饰,Spring 容器会在方法执行前开启一个事务,并在方法执行后根据执行结果提交或回滚事务。

三、注解的优点

注解作为一种元数据,具有以下优点:

  1. 简化配置:注解可以将配置信息直接写在代码中,而不需要繁琐的 XML 配置或属性文件配置。

  1. 可读性强:注解将元数据直接写在代码中,使得代码更加易读、易懂。

  1. 可重用性强:通过注解,可以将相同的元数据应用于不同的类、方法或字段,提高了代码的可重用性。

  1. 面向切面编程:注解在 AOP 中发挥了重要作用,可以方便地将切面逻辑织入到方法中,从而实现面向切面编程。

四、总结

  • 本文针对 Spring 框架中常用的几个注解进行了原理剖析,并通过实际案例展示了如何使用这些注解。

  • 注解作为一种元数据,具有简化配置、可读性强、可重用性强、面向切面编程等优点,是 Java 开发中不可或缺的一部分。

  • 在实际开发中,合理使用注解可以让代码更加简洁、易读、易维护。

Spring 注解底层原理及实现详解 Target:指定注解的作用目标(类、方法、字段等)。@Target(ElementType.TYPE) // 作用于类@Retention:定义注解的保留策略(源码、编译期、运行时)。@Retention(RetentionPolicy.RUNTIME) // 运行时可通过反射读取:标记注解是否包含在 Javadoc 中。@Inherited:允许子类继承父类的注解Spring 核心元注解@Component是所有 Spring 组件注解(如@Service机制​实现原理​组件扫描基于。 阅读详情

相关推荐

Spring注解原理深度解析:从入门到精通

本文深入解析Spring注解原理,涵盖从基础概念到底层实现的全方位内容。主要内容包括:1) Spring注解发展历程及其优势,展示了从XML到纯注解配置的演进;2) Java注解基础,详细解析元注解和反射机制的应用;3) Spring核心注解如@Component及其派生注解的用法;4) 注解处理器机制和扫描过程;5) 自定义注解开发方法。文章通过代码示例辅助说明,帮助开发者深入理解注解驱动开发的核心技术,掌握Spring框架中注解的底层实现原理和最佳实践。

ljw714的专栏 1043

Spring注解怎么实现的一些基本原理

这是对Spring注解是怎么实现的一个大概基本原理,条件是采取的理想状态,所以代码中还有缺陷的话请谅解,如果有需要的朋友可以放心下载,里面有详细的解释和流程。相信你能看懂

Spring MVC 深度剖析与实战应用,与spirngboot和tomcat之间奥秘

Spring MVC 是 Spring 框架的一个模块(提升:spirng框架有哪些核心模块呢?),它是基于 Java 实现的一个轻量级 Web 框架,遵循 MVC(Model-View-Controller,模型 - 视图 - 控制器)设计模式(分层思想出现)。MVC 模式将一个应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller),它们各自处理不同的职责,从而实现代码的解耦和可维护性,这里主要弄清楚有哪几层,明白分层思想出现。模型(Model)

957

Spring重要注解介绍以及原理

*** 4)、自定义组件想要使用Spring容器底层的一些组件(ApplicationContext,BeanFactory,xxx);* 自定义组件实现xxxAware;在创建对象的时候,会调用接口(Aware)规定的方法注入相关组件;* 把Spring底层一些组件注入到自定义的bean中;* xxxAware:功能使用xxxProcessor来处理的;* 例: ApplicationContextAware ==> ApplicationContextAwareProcessor;

qq_47075878的博客 1133

Spring注解实现原理

Spring注解实现原理 Spring中有哪些注解 Spring中的注解主要分为两类: 类级别的注解:如@Component、@Repository、@Controller、@Service以及JavaEE6的@ManagedBean和@Named注解,都是添加在类上面的类级别注解。 类内部的注解:如@Autowire、@Value、@Resource以及EJB和WebService相关的注解等,都是添加在类内部的字段或者方法上的类内部注解。 具体的来说又有以下几种类型的注解方式: 1.声明b

liyangxueit的博客 1万+

Spring 常用注解原理剖析

前言 Spring 框架核心组件之一是 IOC,IOC 则管理 Bean 的创建和 Bean 之间的依赖注入,对于 Bean 的创建可以通过在 XML 里面使用<bean/>标签来配置,对于 Bean 之间的依赖可以使用构造方法注入、Set 方法注入在 XML 里面配置。但是使用这种方式会使 XML 变的比较臃肿庞大,并且还需要开发人员一个个的在 XML 里面配置 Bean 之间的依赖,这简直是一个灾难,还好 Spring 框架给我们提供了一系列的注解让开发人员从这个灾难中解脱出来,比...

hober的专栏 434

spring 常用注解 原理 逻辑 代码演示

01 spring 常用注解 原理 逻辑 文章目录01 spring 常用注解 原理 逻辑一、组件注册1.1-spring注解驱动开发1.2-组件注册 @Configuration一、导入spring-context1.2-组件注册 Configuration、Bean、ComponentScan(s)、TypeFilter1.3-组件注册 @Scope1.4-组件注册@Lazy-bean懒加载1.5-组件注册 @Conditional 按照条件给容器注入Bean1.6-组件注册 @Import快速导入1.

qq_29310729的博客 6663

SpringBoot常用注解大全

SpringBoot常用注解大全 前言 分析其注解中源码构成,弄明白每一个注解的含义 一、常用注解 1.@Configuration SpringBoot其配置核心也就是这个配置类,这时我们应该回忆一下Spring的IOC的概念 什么是IOD?:顾名思义就是我们常说的控制反转 那什么又是控制反转呢: 控制:传统程序我们一般都是应用到new对象的方式创建对象,但我们使用Spring后,对象都又Spring替我们创建。 反转:程序本沈不创建对象,由主动变成变为被动接收。 IOC的创建对象的方式分为无参构造器的

weixin_43426918的博客 820

Spring全家桶:原理思想

文章目录springIOCSpring Bean 作用域Spring Bean 生命周期依赖注入APO 原理MVC 原理 spring spring 思想 把所有对象都当做Bean 通过配置 Bean 及 Bean 之间的依赖关系, 然后利用 Java 语言的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。 原理 Spring 启动时读取应用程序提供的 Bean 配置信息,并在 Spring 容器中生成一份相应的 Bean 配 置注册表 BeanDefinitionRegistry

xyc1211的博客 779

Spring框架入门:Spring注解支持详解

本文系统讲解Spring注解的核心机制与实战应用。从XML到注解的演进历程出发,详细解析四大类核心注解:Bean注册类(@Component、@Service等)、依赖注入类(@Autowired、@Qualifier等)、配置类(@Configuration、@ComponentScan等)和条件化注解(@Conditional、@Profile)。文章深入剖析注解驱动配置原理,演示自定义注解开发,并总结常见陷阱与最佳实践,强调构造器注入优于字段注入。

小二丶的博客 923

高频面试题:Spring 依赖注入怎么实现的?3 个注解 + 2 个处理器,原理其实很简单

本文深入剖析Spring框架中三个核心依赖注入注解@Autowired、@Value和@Resource的工作机制。首先对比了三者的功能差异和使用场景,通过代码示例展示其具体应用。随后详细解析了依赖注入的通用实现逻辑,包括Bean创建的生命周期扩展点InstantiationAwareBeanPostProcessor的作用机制。重点阐述了@Autowired和@Value的处理流程,说明AutowiredAnnotationBeanPostProcessor如何完成注解识别、元数据封装和资源注入的全过程

Debug日记的博客 786

深入理解Spring Boot的事务注解及其实现原理

事务是指一组操作的集合,这些操作要么全部成功,要么全部失败。原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成。一致性(Consistency):事务完成后,数据库必须处于一致的状态。隔离性(Isolation):一个事务的执行不应受到其他事务的干扰。持久性(Durability):事务完成后,其结果应永久保存在数据库中。通过AOP和代理机制,Spring能够在方法调用前后自动管理事务,从而简化了事务管理的复杂性。

WenZhang的博客 3450

一文搞懂!SpringBoot自动装配原理

一文搞懂!SpringBoot自动装配原理

2201_75490194的博客 3196

Spring Boot

摘要:本文介绍了Spring Boot框架的特点和使用教程,并提供了最佳实践和源码解析。其中包括自动配置机制、启动流程源码解析、常用注解详解、核心组件功能解析等内容。此外,还提供了自定义Starter组件和调试技巧等相关知识点。

Java_soul_GJH的博客 1876

Spring Boot 注解全栈指南:涵盖 Bean 注册、配置加载、请求映射、事务控制、数据校验等一网打尽

哈喽大家好~我发现很多同学对注解的使用停留在“照猫画虎”的阶段:知道@Autowired能注入,但说不清它和@Resource的本质区别;知道@Transactional能开事务,但遇到不回滚的情况就抓瞎。 注解的本质是元数据,它是写给框架看的“说明书”。在Spring Boot“约定优于配置”的哲学下,注解是我们与框架沟通的核心语言。

2301_81073317的博客 1116
上一篇: SQL 优化必懂知识点
下一篇: 从零开始,开发一款聊天机器人
good7ob
博客等级 码龄4年 500粉丝 250原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值