java spring 注解

注解,也称元数据,通常在包、类、字段、方法、局部变量等的前面,提供说明、注释的功能。
@Autowired : 进行依赖注释的功能,将依赖对象注入到当前对象。

@Autowired和@Resource 相同点:都是 Spring/Spring Boot 项目中,用来进行依赖注入的注解。它们都提供了将依赖对象注入到当前对象的功能 不同点:1.来源不同。 @Autowired 和 @Resource 来自不同的“父类”,其中 @Autowired 是 Spring 定义的注解,而 @Resource 是 Java 定义的注解,它来自于 JSR-250(Java 250 规范提案)。2.依赖查找顺序不同 @Autowired 是先根据类型(byType)查找,如果存在多个 Bean 再根据名称(byName)进行查找。@Resource 是先根据名称查找,如果(根据名称)查找不到,再根据类型进行查找。3.支持的参数不同 @Autowired 只支持设置一个 required 的参数,而 @Resource 支持 7 个参数https://blog.csdn.net/LJJ555a/article/details/132074655?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522a1d746725a12dd1c5d1366ee1224a869%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=a1d746725a12dd1c5d1366ee1224a869&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-132074655-null-null.142v102control&utm_term=%40autowired%E5%92%8C%40resource%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187

@RestController:是 Spring Boot 中用来声明 RESTful Web 服务的注解 1.声明类为 RESTful Web 服务:@RestController 注解告诉 Spring Boot,这个类是一个 RESTful Web 服务,它会被用来处理客户端发送的 HTTP 请求。2.自动转换为 JSON 或 XML:@RestController 注解可以自动将返回值转换为 JSON 或 XML 格式,方便客户端解析处理。3.简化代码:@RestController 注解可以大大简化 RESTful Web 服务的开发,减少代码量和冗余操作。

@RequestMapping注解是一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。https://blog.csdn.net/m0_67401055/article/details/125057030?ops_request_misc=%257B%2522request%255Fid%2522%253A%25226e1b5a7609ac1d85fcd41577592dc170%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=6e1b5a7609ac1d85fcd41577592dc170&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-125057030-null-null.142v102control&utm_term=%40RequestMapping&spm=1018.2226.3001.4187
@RequestMapping的params属性:@RequestMapping的params属性是通过当前请求的请求参数来匹配请求;
@RequestMapping的params属性是一个字符串类型的数组,可以通过下面四种表达是来设置匹配关系
“param”:要求请求映射的请求必须为包含 param的请求参数
“!param”:要求请求映射的请求是不能包含param的请求参数
“param=value”:要求请求映射的请求必须包含 param 的请求参数,且 param 参数的值必须为 value
“param!=value”: 要求请求映射的请求是必须包含 param 的请求参数,其值不能为 value。

注意:我们设置了params属性,就意味着该请求映射的请求必须包含username才能够请求成功。

@GetMapping:处理get方式请求的映射
@PostMapping:处理post方式请求的映射
@PutMapping:处理put方式请求的映射
@DeleteMapping:处理delete方式请求的映射
@GetMapping就相当于@RequestMapping(method=RequestMethod.GET),它会将get映射到特定的方法上。

@Contended 注解的目的:
@Contended 注解用于指示 JVM 在内存布局上为一个字段分配独立的缓存行。这在并发编程中非常有用,因为多个线程可能访问共享变量,这可能导致虚假共享造成性能下降。
什么是虚假共享?
虚假共享发生在不同处理器的线程修改位于同一缓存行上的变量时。即使它们并没有访问同一个变量,缓存行仍然必须在各个处理器间反复加载,这会显著影响性能。通过将字段标记为 @Contended,可以指示 JVM 将这些字段分配到不同的缓存行,从而防止性能问题。

@EnableCaching:用于启用Spring的缓存抽象。在配置类上添加这个注解时,Spring会自动检测并应用缓存相关的注解

@ComponentScan注解做的事情就是告诉Spring从哪里找到bean。

@Data

@Log

@Target

@Retention

动态代理中切面注解的实现:
定义阶段--创建自定义注解类,指定注解的作用目标(如方法)和保留策略(通常为运行时)
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Log { String value() default ""; }
检测阶段--利用反射API在运行时检测方法上是否存在特定注解,提取注解中的配置属性值
if (targetMethod.isAnnotationPresent(Log.class)) { System.out.println("【日志】开始执行方法: " + method.getName() + ", 参数: " + Arrays.toString(args)); }
应用阶段--根据注解存在与否决定是否应用特定切面,根据注解属性调整切面的具体行为 查看真实主题角色(被代理类)中是否运用相关注解,如@Log 、@PerformanceMonitor来决定是否调用方法

posted @ 2025-04-14 15:27  哈孜  阅读(36)  评论(0)    收藏  举报