Java 常用注解

一、较不熟悉
1、@MappedJdbcTypes(JdbcType.VARCHAR)
MyBatis 框架中的一个注解,用于指定某个字段或方法参数与数据库中的 JDBC 类型之间的映射关系。通常作用在实体类属性或者参数上。
如下标识username字段映射到数据库中的VARCHAR属性。
public interface UserMapper {
@Select(“SELECT * FROM user WHERE username = #{username}”)
User getUserByUsername(@Param(“username”) @MappedJdbcTypes(JdbcType.VARCHAR) String username);
}

2、@Import({Annotation4.class})
Spring Framework 中的一个注解,用于导入配置类或组件,将它们加入到 Spring 的应用上下文中。当你使用 @Import 注解时,你告诉 Spring 容器去加载并注册指定的类。这通常用于以下情况:
(1)、导入配置类:当你想要将另一个配置类中的 @Bean 方法定义的 bean 导入到当前配置类中时。
(2)、导入组件:导入一些特殊的组件,这些组件可能不是通过 @Component、@Service、@Repository 或 @Controller 注解自动扫描的。
(3)、导入 ImportSelector 或 ImportBeanDefinitionRegistrar:这些是更高级的用法,允许你基于某些条件动态地导入配置类或 bean 定义。
3、@Profile
是Spring Framework 中的注解,用于指示某个组件在特定的环境下生效。
注:
运行时使用哪个profile由spring.profiles.active控制,常用以下2种方式:配置文件方式、命令行方式。
配置文件application.properties
spring.profiles.active=dev
或启动命令指定环境:
java -jar xxx.jar --spring.profiles.active=dev
@Configuration
@Profile(“dev”)
public class DevConfig {
// … Bean definitions for development environment …
}

@Configuration
@Profile(“prod”)
public class ProdConfig {
// … Bean definitions for production environment …
}

4、@PropertySource
指定一个或多个属性文件的位置,这些属性文件包含配置信息,可以被 @Value 注解引用,或者通过 Environment 抽象访问。
如下:引入application_1.properties配置文件,之后可以将application_1.properties配置文件中的app.name通过@Value的方式注入到appName中。
@Configuration
@PropertySource(“classpath:application_1.properties”)
public class AppConfig {

@Value("${app.name}")  
private String appName;  // ... other bean definitions ...  

}
5、@ConditionalOnClass(name = {“”})
如:@ConditionalOnClass(name = {“springfox.documentation.spring.web.SpringfoxWebMvcConfiguration”})

是 Spring Boot 中的一个条件注解,用于在类路径(classpath)上检查指定的类是否存在。只有当指定的类存在时,带有此注解的组件(如配置类、bean 等)才会被注册到 Spring 应用上下文中。

若是和@Import等注解一起使用时,如果@ConditionalOnClass指定的类不存在,则@Import不能注入成功。若条件成立时则可以注入成功。

6、@ConditionalOnWebApplication

是 Spring Boot 的一个条件注解,用于确定当前应用是否是一个 Web 应用。如果不是 Web 应用(例如,它可能是一个命令行应用),那么这些带有 @ConditionalOnWebApplication 注解的配置类就不会被加载。

7、@SpringBootConfiguration
注解用于标记一个类为配置类,它继承自@Configuration注解,表示该类是一个配置类,可以用来定义bean、配置属性等。

8、@EnableAutoConfiguration
用于启用自动配置功能,它告诉Spring Boot根据项目中的依赖关系自动配置bean。例如,如果项目中包含了MySQL驱动,那么Spring Boot会自动配置一个DataSource bean,用于连接MySQL数据库。

9、@AliasFor
是 Spring Framework 中的一个注解,它用于在自定义注解中创建一个属性的别名,通常与复合注解(如 @SpringBootApplication)一起使用,以确保属性的值能够正确地传播到它们所代表的注解中。

如下:当使用SpringBootApplication注解且指定scanBasePackages参数时。相当于引用ComponentScan注解赋值给basePackageClasses属性。
public @interface SpringBootApplication {
@AliasFor(
annotation = ComponentScan.class,
attribute = “basePackageClasses”
)
String[] scanBasePackages() default {};
}

如下:当使用SpringBootApplication注解且指定proxyBeanMethods参数时。相当于引用Configuration注解的proxyBeanMethods属性,赋予了相同的值。
public @interface SpringBootApplication {
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}

10、@ConfigurationProperties(prefix = “mqtt”)
用来定义从外部配置源(比如 properties 或 YAML 文件)绑定属性到一个配置类上。通常需要通过@EnableConfigurationProperties(当前类.class)将当前的配置类加载到spring容器中。如果当前类已经通过@Component被扫描加载到spring容器了,则不在需要@EnableConfigurationProperties(当前类.class)加载。
application.properties
mqtt.host=localhost
mqtt.port=1883

Java
@ConfigurationProperties(prefix = “mqtt”)
public class Annotation1 {
private String host;
private int port;
}

11、@EnableConfigurationProperties(Annotation1.class)
将指定的类加载到容器中,通常是@ConfigurationProperties注解修饰的类。如果该类已经被扫描加载到容器中了,则当前注解也可以不要。

12、@Primary
Spring Framework 中的一个注解,它用于在存在多个同类型的 bean 时,指定一个首选的 bean,以用于自动装配。当然如果想明确指定了想要使用的 bean(例如,通过 @Qualifier 注解)

如下:Spring 会选择 BeanB,因为它带有 @Primary 注解。
@Component
public class BeanA implements MyInterface {
// …
}

@Component
@Primary
public class BeanB implements MyInterface {
// …
}

使用BeanB ,因为
@Autowired
private MyInterface myInterface;
13、@Qualifier
容器中有多个相同类型的 beans 存在时。通过 @Qualifier,你可以指定要注入的确切 bean。
public interface MessageService {
String getMessage();
}

@Component(“helloMessageService”)
public class HelloMessageService implements MessageService {
@Override
public String getMessage() {
return “Hello World!”;
}
}

@Component(“goodbyeMessageService”)
public class GoodbyeMessageService implements MessageService {
@Override
public String getMessage() {
return “Goodbye World!”;
}
}

// 使用@Qualifier(“helloMessageService”) 告诉容器到底使用哪一个bean
@Autowired
@Qualifier(“helloMessageService”)
private MessageService messageService;
14、@ControllerAdvice
Spring 框架中用于全局处理控制器层异常的注解。它通常与 @ExceptionHandler、@InitBinder 和 @ModelAttribute 注解一起使用,以提供全局的异常处理、数据绑定和数据预处理逻辑。
使用参考下面15的@ExceptionHandler示例。
15、@ExceptionHandler(Exception.class)
用于处理由控制器方法抛出的异常。开发者可以对特定的异常类型定义自定义的处理逻辑,而不是依赖于默认的异常处理机制。需要放在@ControllerAdvice注解的类中使用。如果没有执行异常类型,则是错误的定义,方法不会生效。

示例:当controller中抛出任何异常都走此方法处理。(实际中通过 @ExceptionHandler(value = 自定义异常.class)比较常用)
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.context.request.WebRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Enumeration;

@ControllerAdvice
public class GlobalExceptionHandler {

@ExceptionHandler(value = Exception.class)
public ResponseEntity<Object> handleAllExceptions(Exception ex, HttpServletRequest request, WebRequest webRequest) {// 获取异常类信息Class<? extends Throwable> exceptionClass = ex.getClass();System.out.println("异常类型的名称: " + exceptionClass.getName());// 获取请求参数(get请求或post-form)Enumeration<String> paramNames = request.getParameterNames();StringBuilder paramsBuilder = new StringBuilder();while (paramNames.hasMoreElements()) {String paramName = paramNames.nextElement();String paramValue = request.getParameter(paramName);paramsBuilder.append(paramName).append("=").append(paramValue).append("&");}String params = paramsBuilder.toString();if (params.length() > 0) {params = params.substring(0, params.length() - 1); // 移除末尾的 '&'}System.out.println("http请求参数: " + params);// 获取堆栈跟踪元素数组StackTraceElement[] stackTraceElements = ex.getStackTrace();if (stackTraceElements.length > 0) {StackTraceElement element 

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

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

相关文章

KY199 查找

描述&#xff1a; 输入数组长度 n 输入数组 a[1…n] 输入查找个数m 输入查找数字b[1…m] 输出 YES or NO 查找有则YES 否则NO 。 输入描述&#xff1a; 输入有多组数据。 每组输入n&#xff0c;然后输入n个整数&#xff0c;再输入m&#xff0c;然后再输入m个整数&#xff08;1&…

疫情网课管理系统|基于springboot框架+ Mysql+Java+Tomcat的疫情网课管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 ​编辑 学生功能模块 管理员功能 教师功能模块 系统功能设计 数据库E-R图设计 lun…

人工智能入门之旅:从基础知识到实战应用(五)

一、人工智能实战项目与案例分析 1. AI入门项目电影评论情感分析实战 典型的AI入门实战项目&#xff0c;比如电影评论情感分析&#xff0c;是一个非常适合初学者的项目&#xff0c;因为它简单易懂&#xff0c;同时涵盖了自然语言处理&#xff08;NLP&#xff09;领域的一些基…

Ubuntu上搭建TFTP服务

Ubuntu上搭建TFTP服务 TFTP服务简介搭建TFTP服务安装TFTP服务修改配置文件 重启服务 TFTP服务简介 TFTP是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议&#xff0c;适用于开销不大、不复杂的应用场合。TFTP协议专门为小文件传输而设计&#xff0c;只…

虚拟游戏理财 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 在一款虚拟游戏中生活&#xff0c;你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。 现有一家Bank&#xff0c;它提供有若干理财产品m&#xff0c;风险及…

line_profiler逐行分析代码时间

最近model训练有点瓶颈&#xff0c;GPU的利用率总是很低。所以看看能不能使用line_profiler来发现问题。 使用方式&#xff1a; 确保 line_profiler 正确安装&#xff1a; pip install line_profiler在需要分析的函数加上修饰器&#xff1a; from line_profiler import prof…

【PHP安全】PHP伪协议

PHP伪协议&#xff1a; file:// #访问本地文件系统http:// #访问HTTPs网址ftp:// #访问ftp URLphp:// #访问输入输出流zlib:// #压缩流data:// #数据&#xff08;RFC 2397&#xff09;ssh2:// #security shell2expect:// #处理交互式的流glob:// #查找匹配的文件路径phar:// #P…

33.使用ORDER BY排序

用ORDER BY子句排序行 ASC&#xff1a;升序排序&#xff0c;默认 DESC&#xff1a;降序排序 ORDER BY 子句在SELECT 语句的最后 在一个不明确的查询结果中排序返回的行。ORDER BY子句用于排序。如果使用了ORDER BY子句&#xff0c;它必须位于SQL语句的最后。 SELECT 语句的…

Siamese Network(孪生神经网络)详解

Siamese和Chinese有点像。Siam是古时候泰国的称呼&#xff0c;中文译作暹罗。Siamese也就是“暹罗”人或“泰国”人。Siamese在英语中是“孪生”、“连体”的意思&#xff0c;这是为什么呢&#xff1f;十九世纪泰国出生了一对连体婴儿&#xff0c;当时的医学技术无法使两人分离…

前端页面渲染机制

前端页面渲染机制是指在 web 开发中&#xff0c;浏览器如何将 HTML、CSS 和 JavaScript 转换为用户可视化的网页界面的过程。这个过程通常包括以下几个主要步骤&#xff1a; 加载 HTML: 首先&#xff0c;浏览器会获取 HTML 文件&#xff0c;并解析其结构。这个过程包括识别 HTM…

MySQL锁—全局锁、表级锁、行级锁详解

MySQL 锁 MySQL的锁按照锁的粒度可以分为全局锁、表级锁和行级锁。 一、全局锁 1. 概念 全局锁&#xff0c;是对整个数据库实例加锁&#xff0c;加锁后整个实例处于只读状态&#xff0c;后续的DML、DDL语句以及已经执行更新操作的事务提交语句都将被阻塞。 2. 应用场景 数据…

软件功能测试内容有哪些?湖南长沙软件测评公司分享

软件功能测试主要是验证软件应用程序的功能&#xff0c;且不管功能是否根据需求规范运行。是通过给出适当的输入值&#xff0c;确定输出并使用预期输出验证实际输出来测试每个功能。也可以看作“黑盒测试”&#xff0c;因为功能测试不用考虑程序内部结构和内部特性&#xff0c;…

MongoDB聚合运算符:$exp

文章目录 语法使用举例 $exp聚合运算符返回自然常数或欧拉数e的幂值&#xff08;次方&#xff09;的结果 语法 { $exp: <exponent> }<exponent>为指数&#xff0c;可以是任何数值表达式。 使用 如果参数为null或引用的字段不存在&#xff0c;$exp返回null&#…

【夏普利值——详细讲解】

夏普利值的介绍 沙普利值是合作博弈理论中的一个概念&#xff0c;由劳埃德-沙普利在1951年提出了这个概念&#xff0c;并因此在2012年获得了诺贝尔经济学奖。对于每个合作博弈&#xff0c;如联邦学习&#xff0c;可以将机构产生的模型的总提升在各个机构上形成一个有效的贡献分…

【iOS ARKit】PhysicsMotionComponent

使用 Physics BodyComponent 组件&#xff0c;通过设置物理参数、物理材质、施加作用力&#xff0c;能完全模拟物体在真实世界中的行为&#xff0c;这种方式的优点是遵循物理学规律、控制精确&#xff0c;但缺点是不直观。使用 PhysicsMotion Component组件则可以通过直接设置速…

Orange3数据预处理(清理特征组件)

清理特征 移除未使用的属性值和无用的属性&#xff0c;并对剩余的值进行排序。 输入 数据: 输入数据集 输出 数据: 过滤后的数据集 命名属性定义有时包含在数据中不出现的值。即使原始数据中没有这种情况&#xff0c;数据过滤、选择示例子集等操作也可能移除…

用python开发一个性能压测框架(超级简单)

用python开发一个性能压测框架&#xff08;超级简单&#xff09; 该框架是一个基础框架&#xff0c;超级简单&#xff0c;已经跑通&#xff0c;可以进行优化扩展 由于工作需要&#xff0c;最近开发了一款python性能压测框架&#xff0c;主要是对后端接口进行多线程压测 主要…

(二十五)Flask之MTVMVC架构模式Demo【重点:原生session使用及易错点!】

目录&#xff1a; 每篇前言&#xff1a;MTV&MVC构建一个基于MTV模式的Demo项目&#xff1a;蹦出一个问题&#xff1a; 每篇前言&#xff1a; &#x1f3c6;&#x1f3c6;作者介绍&#xff1a;【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领…

性能工具部署 - 自动在30多台机器上部署发流工具,并自动配置各自的参数,一键控制所有节点工具的启动、停止、重启

需求1&#xff1a;脚本快速上传文件到制定目录并解压 import paramiko import scp import os import pexpect# SSH连接信息 ssh_host 162.14.xx ssh_port 22 # 默认的SSH端口 ssh_username root # 登录用户名 ssh_password xx # 登录密码 sudo_password xx # 登录密码…

关于Transfomer的思考

为何诞生 在说transformer是什么&#xff0c;有什么优势之类的之前&#xff0c;先谈一谈它因何而诞生。transformer诞生最重要的原因是早先的语言模型&#xff0c;比如RNN&#xff0c;由于其本身的训练机制导致其并行度不高&#xff0c;特别是遇到一些长句子的情况下。其次&…