Spring相关注解详细版

1、@RestController @RequestMapping("/api")这两个的作用分别是什么?如何相互区分?

   @RestController 注解用于标识一个类是RESTful风格的Controller,它会将方法的返回值直接转换为HTTP响应体,通常用于返回JSON或XML格式的数据。如果一个类没有 @RestController 注解,Spring将不会将其识别为一个Controller类,也就无法处理HTTP请求。

         @RequestMapping 注解用于映射HTTP请求路径到Controller类或方法上。它可以用于类级别和方法级别,用于定义处理请求的路径。如果一个方法没有 @RequestMapping 注解,Spring将不会将其识别为一个请求处理方法,也就无法处理对应的请求。

2、 @configuration的作用以及@bean的作用?

 @configuration是Spring框架中的一个注解,用于定义配置类,配置类相当于传统的Spring XML配置文件,用来定义bean。

  • @Configuration注解的类会被Spring容器识别并用来生成bean定义和服务请求。

示例:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
}

 在Spring框架中,@Bean注解的主要作用是告诉Spring容器一个方法会返回一个对象,该对象需要注册为Spring应用上下文中的一个bean。具体来说,@Bean通常用于配置类中,并用于定义生成bean的方法。

以下是@Bean注解的一些主要作用和用途:

  1. 定义bean@Bean注解的方法会返回一个对象,该对象将被Spring容器管理。可以在该方法中配置对象的初始化、配置和依赖关系。

@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
}

      2.自定义初始化和销毁方法:可以在@Bean注解中指定自定义的初始化和销毁方法。

@Bean(initMethod = "init", destroyMethod = "cleanup")
public MyService myService() {return new MyServiceImpl();
}

      3.依赖注入@Bean方法可以使用参数来表明依赖关系,Spring容器会自动注入这些依赖。

@Bean
public MyService myService(Dependency1 dep1, Dependency2 dep2) {return new MyServiceImpl(dep1, dep2);
}

      4.作用域:可以使用@Bean注解来指定bean的作用域(如单例、原型等)。

@Bean
@Scope("prototype")
public MyService myService() {return new MyServiceImpl();
}

      5.条件化创建:通过结合其他注解(如@Conditional),可以根据某些条件有选择地创建bean。

@Bean
@Conditional(MyCondition.class)
public MyService myService() {return new MyServiceImpl();
}
3、 @Autowired的作用是什么?

 在Spring框架中,@Autowired注解用于实现自动依赖注入。它告诉Spring框架自动装配依赖对象。也就是说,Spring容器会自动寻找和注入匹配的bean到标记了@Autowired注解的字段、构造器或方法中。以下是@Autowired注解的主要作用和用法:

自动注入依赖@Autowired 告诉 Spring 容器将匹配的 Bean 自动注入到标注了 @Autowired 的构造函数、方法或字段中。

简化依赖管理:不需要显式地在代码中手动创建或获取依赖对象,Spring 容器会自动处理依赖关系,使代码更加简洁和可维护。

支持不同的注入方式:支持构造函数注入、方法注入和字段注入。

4、 @Component的作用是什么?@Component和@bean的区别是什么?

@Component 是 Spring 框架中的一个注解,用于将一个类标记为 Spring 的组件(Bean),使其可以被 Spring 容器自动检测、管理和注入。@Component 是一个通用的注解,可以用于任何层的组件。Spring 容器在启动时会扫描带有 @Component 注解的类,并将其实例化、配置并注册到容器中 。

@Component 的作用:

  1. 将类声明为 Bean:使用 @Component 注解的类会被 Spring 自动识别为 Bean,并纳入 Spring 容器的管理中。
  2. 自动扫描和装配:Spring 容器会自动扫描带有 @Component 注解的类并自动实例化它们。
  3. 简化配置:使用 @Component 可以减少 XML 配置文件中的手动 Bean 定义,简化配置过程。

@Component和@bean的区别:

使用场景

  • @Component:用于注解类。通常用于告诉 Spring 这个类需要被作为一个组件进行扫描并管理。它是类级别的注解,适用于那些你直接定义在类上的 Bean。
  • @Bean:用于注解方法。通常用于告诉 Spring 这个方法的返回值需要作为一个 Bean 被管理。它是方法级别的注解,适用于那些你需要以编程的方式创建和配置的 Bean。

使用方式

  • @Component:结合组件扫描(如 @ComponentScan)使用,适合自动发现和装配。
  • @Bean:结合配置类(如 @Configuration)使用,适合显式定义和配置复杂的 Bean。
5、 @Aspect的作用?

 @Aspect 是 Spring AOP(Aspect-Oriented Programming,面向切面编程)中的一个注解,用于定义一个切面(Aspect)。切面是一种横切关注点的模块化表示,它可以用于集中处理诸如日志记录、安全、事务管理等系统级服务,而无需在各个业务逻辑代码中重复这些代码。

@Aspect 的作用:

  1. 定义切面@Aspect 用于声明一个类为切面,切面包含了多个关注点(如日志记录、事务管理等)的具体实现。
  2. 模块化横切关注点:通过切面,可以将那些分散在各个类中的横切关注点代码模块化,提升代码的可维护性和可重用性。
  3. 声明通知(Advice):在切面类中可以定义各种类型的通知(Advice),如前置通知、后置通知、环绕通知、异常通知等,通过这些通知可以在方法执行的不同阶段进行切入。

AOP 基本概念:

  • 切面(Aspect):一个关注点的模块化表示。
  • 连接点(Join Point):程序执行的某个具体点。
  • 通知(Advice):切面在连接点处执行的代码。
  • 切入点(Pointcut):匹配连接点的表达式。
  • 目标对象(Target Object):被通知的对象。
  • 代理(Proxy):通知目标对象后创建的对象。
  • 织入(Weaving):将切面应用到目标对象来创建代理对象的过程。
6、@Resourse 的作用?和@Autowired注解的区别是什么?

主要作用

  1. 注入依赖@Resource 用于自动注入依赖对象,类似于 Spring 框架中的 @Autowired 注解。
  2. 名称匹配@Resource 默认按名称匹配(通过字段名或方法名),如果名称匹配不上,再按类型匹配。
  3. 简化配置:简化配置,使代码更加简洁,便于理解和维护。

@Autowired 的对比

  • 匹配方式

    • @Resource:默认按名称匹配,找不到匹配时按类型匹配。
    • @Autowired:默认按类型匹配,可以结合 @Qualifier 注解按名称匹配。
  • 来源

    • @Resource:属于 Java EE 标准,适用于任何兼容 JSR-250 的框架和容器。
    • @Autowired:属于 Spring 框架特有的注解。
  • 配置灵活性

    • @Resource:支持 nametype 属性来精确控制注入。
    • @Autowired:可以与 @Qualifier 配合使用,提供更灵活的配置选项。

7、 @Qualifier的作用是什么?

@Qualifier 注解是 Spring 框架中用于在依赖注入时区分多个 Bean 的注解。当一个类型有多个候选 Bean 时,@Qualifier 注解可以与 @Autowired@Inject 注解结合使用,以指定需要注入的具体 Bean。它的作用是通过名称来明确指定要注入的 Bean,解决歧义问题。

主要作用

  1. 解决歧义:在同一个类型有多个 Bean 时,通过 @Qualifier 注解指定要注入的 Bean 名称,解决依赖注入的歧义。
  2. 精确注入:与 @Autowired@Inject 注解结合使用,实现精确的依赖注入。

示例如下: 

public interface MyService {void performAction();
}@Service("serviceA")
public class ServiceA implements MyService {@Overridepublic void performAction() {System.out.println("ServiceA performing action");}
}@Service("serviceB")
public class ServiceB implements MyService {@Overridepublic void performAction() {System.out.println("ServiceB performing action");}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;@Component
public class MyComponent {private final MyService myService;@Autowiredpublic MyComponent(@Qualifier("serviceA") MyService myService) {this.myService = myService;}public void doSomething() {myService.performAction();}
}
8、 @Transactional是如何使用的?

@Transactional 注解是 Spring 框架中用于声明事务的方法。它能够简化事务管理,使得开发者不必显式地管理事务边界(如 begincommitrollback),而是通过注解的方式来声明某个方法需要事务支持。 

作用

  1. 声明式事务管理:通过注解声明事务边界,而不是通过编程的方式。
  2. 事务属性配置:可以配置事务的传播行为、隔离级别、超时时间等。
  3. 异常回滚:指定哪些异常会触发事务回滚。

 @Transactional 可以应用在类或方法上,通常用于服务层(Service Layer)的类或方法。

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
@Transactional
public class UserService {public void createUser(User user) {// 事务代码}public void updateUser(User user) {// 事务代码}
}
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactionalpublic void createUser(User user) {// 事务代码}@Transactionalpublic void updateUser(User user) {// 事务代码}
}

 

 

 

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

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

相关文章

[力扣二叉树]本地调试环境指导手册

以236. 二叉树的最近公共祖先为例子 本地编译软件为Viusal Studio 2022 写代码 项目里文件位置 CreateTree.h #pragma once #ifndef CLIONPROJECT_LEETCODECREATETREE_H #define CLIONPROJECT_LEETCODECREATETREE_H #include<vector> #include<queue> using na…

qt 简单实验 画一个等边三角形

1.概要 2.代码 2.1 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr)…

Linux (centos7.9)上部署 NFS(Network File System)服务

NFS&#xff08;Network File System&#xff09;是一种网络文件系统协议&#xff0c;允许不同计算机之间通过网络共享文件和目录。NFS 最初由 Sun Microsystems 在 1984 年开发&#xff0c;现已成为许多 Unix 和类 Unix 系统&#xff08;包括 Linux&#xff09;上的标准文件系…

Chromium 调试指南2024 Mac篇 - 编译 Chromium(二)

1.引言 在完成了环境准备和源码获取之后&#xff0c;下一步就是编译Chromium源码。编译是将源码转换为可执行程序的关键步骤&#xff0c;对于验证代码更改和调试至关重要。由于Chromium项目的庞大规模和复杂性&#xff0c;编译过程可能会遇到各种问题和挑战&#xff0c;因此了…

RSA —非对称加密算法

常见的数字加密方式分为两类&#xff1a;对称加密 和 非对称加密。 对称加密&#xff0c;又称为私钥加密&#xff0c;指的是加密和解密使用同一个密钥的方式。其特点是加密和解密过程简单、快速&#xff0c;并且只需要一个密钥。常见的对称加密算法包括DES、AES等。然而&#x…

LabVIEW常用的加密硬件

LabVIEW在工程和科学领域中广泛应用&#xff0c;其中数据保护和程序安全尤为重要。为了确保数据的安全性和完整性&#xff0c;常用的加密硬件设备包括TPM&#xff08;可信平台模块&#xff09;、HSM&#xff08;硬件安全模块&#xff09;和专用加密芯片。本文将推荐几款常用的加…

【嵌入式开发】UART

目录 一、概述 1.1 常见的通信类别/特点 1.2 常见几种通信 二、UART通信协议 2.1 UART通信介绍 2.2 UART通信协议 物理连接示意图&#xff1a; 三、STM32的UART接口 3.1 STM32的UART特点 3.2 STM32的UART框图分析 3.3 UART初始化步骤 3.4 STM32中UART使用 一、概述…

物联网技术-第4章物联网通信技术-4.1无线网络

目录 1. 无线通信概念 &#xff08;1&#xff09;有线与无线 &#xff08;2&#xff09;电磁波的频谱 &#xff08;3&#xff09;频段的划分 &#xff08;4&#xff09;调制与解调 &#xff08;5&#xff09;调制技术 &#xff08;6&#xff09;信道的复用 &#xff08;…

【ARMv8/v9 GIC 系列 4.3 -- GIC 中断控制系统寄存器 ICC_SRE_ELn 使用介绍】

文章目录 GIC 中断控制系统寄存器 ICC_SRE_ELn寄存器位域介绍Interrupt BypassBypass IRQBypass FIQBypass 配置GIC 中断控制系统寄存器 ICC_SRE_ELn ICC_SRE_EL3是中断控制器系统寄存器(Interrupt Controller System Register),用于控制在异常级别3(EL3)下,对GIC CPU接口…

恒昌公益第五所“云杉校园”于湖南怀化正式揭牌

在中国近代史上湖南无疑是不可忽视的存在&#xff0c;在“敢为天下先”的湖湘文化熏陶下更是涌现了无数改变国家命运的人物。而作为推动民族复兴与社会进步的关键支柱&#xff0c;重视教育的传统起到的作用功不可没。在迈向中国式现代化的当下&#xff0c;积极推动优质教育资源…

无版权图片素材搜索网站,解决无版权图片查找问题

在数字内容创作领域&#xff0c;图片素材的选择至关重要。一张高质量、合适的图片不仅能够吸引读者的眼球&#xff0c;还能有效传达信息。然而&#xff0c;找到既免费又无版权限制的图片素材并非易事。小编将为大家介绍几个解决这一问题的无版权图片素材搜索网站&#xff0c;这…

简易版的进程池

1.使用匿名管道实现 进程池 #pragma oncetypedef void(*task_t)();void task1() {cout << "游戏 刷新日志" << endl; }void task2() {cout << "游戏 刷新野区" << endl; } void task3() {cout << "游戏 检测软件是否更…

PyMuPDF 操作手册 - 05 PDF的OCR识别等

文章目录 六、PyMuPDF的OCR识别6.1 使用 Tesseract进行OCR6.2 使用MuPDF进行OCR6.3 使用 Python 包easyocr进行OCR识别6.4 使用 Python ocrmypdf包进行OCR识别6.5 将图像批量OCR并转换为PDF七、PDF附加、嵌入、批注等7.1 附加文件7.2 嵌入文件7.3 从文档中获取所有批注六、PyMu…

【链表经典面试题】LeetCode138.复制带随机指针的链表(链表深拷贝)

&#x1f4c7;文章目录 &#x1f680;题目描述&#x1f680;思路1&#xff1a;&#x1f680;思路2&#xff1a;&#x1f680;完整代码 &#x1f680;题目描述 解读&#xff1a; 题目意思就是 给你一个链表 这个链表中除了有next指针之外 还有一个指向这个链表的随机位置的一个指…

python读数据,并且 csv格式的,如何应对。

s545112015022319.txt 要求 通过python 导入程序 高度(距地) 时间 气温 气压 湿度 露点 温露差 虚温 风向 风速 纬度差 经度差 0 0 0.0 0.9 1015 38 -11.8 12.7 1.6 203 1 0.0 0.0 1 10 0.0 2.3 1014 37 -11.0 13.3 3.0 203 …

平安健康CEO李斗谈如何破解居家养老行业痛点,打造优质服务

在人口老龄化趋势日益加剧的背景下&#xff0c;居家养老服务正成为满足老年人生活需求的重要一环。平安健康作为行业的领军企业&#xff0c;自2021年起便积极布局居家养老服务市场&#xff0c;并于2022年推出服务品牌“平安管家”。经过两年多的发展&#xff0c;平安健康董事长…

虚函数 虚表指针

虚函数表和虚表指针 1&#xff0c;虚函数的含义 用virtual声明类的成员函数称之为虚函数 2&#xff0c;作用 用于实现多态 存在继承关系&#xff0c;子类继承父类 子类重写了父类的virtual function 子类以父类的指针或者引用的身份出现 3&#xff0c;虚函数的实现原理 其中的…

JavaScript知识点大总结来了-------这一篇就足够啦!!!

JavaScript基础知识 一、对象的使用 1、创建对象 这里创建对象的方法我们采用最常用的一种&#xff1a; //第一种 <script>var Person {name: "zhangsan",age: "19",weight: "140",hight: "170",print:function(){console.…

山东济南比较出名的起名大师的老师,中国最厉害的改名大师颜廷利:短命的小草,年年自损;长寿的大树,万古长青。。。(升命学说)

在中国第一起名大师的老师颜廷利教授的《升命学说》中&#xff0c;通过“净化论”、“和合法则”、“唯悟主义”以及“镜正理念”的阐述&#xff0c;我们得以窥见生命的不同维度。他以自然界中短命的小草与长寿的大树为例&#xff0c;揭示了生命形态的对比与哲理。 小草&#…

ADI Trinamic TMC2300 完美用于相机镜头的马达驱动芯片方案

TMC2300-LA是一款用于高达 1.2A RMS 的两相步进电机的低压驱动芯片&#xff0c;低电压的步进电机驱动器是用于电池供电的、空间和待机功率临界驱动器应用。它的静音驱动技术StealthChop™能够为便携式&#xff0c;家庭和办公应用程序的非窃听运动控制&#xff0c;确保安静&…