当前位置: 首页 > wzjs >正文

最简单的建个人网站武汉seo优化公司

最简单的建个人网站,武汉seo优化公司,上海网站建设 中华企业录,边坝网站制作目录 定义自定义注解 元注解 示例代码 使用自定义注解 通过反射获取注解信息 常见的注解 Spring注解 组件扫描与 Bean 定义 Component、Controller、Service和Repository区别 AOP Springmvc注解 控制器相关注解 请求映射注解 请求参数注解 响应相关注解 异常处…

目录

定义自定义注解

元注解

示例代码

使用自定义注解

通过反射获取注解信息

常见的注解

Spring注解

组件扫描与 Bean 定义

@Component、@Controller、@Service和@Repository区别

AOP

Springmvc注解

控制器相关注解

请求映射注解

请求参数注解

响应相关注解

异常处理注解

Post 接口,用 get 请求,收到的状态码是多少?

405 Method Not Allowed

400 Bad Request

500 Internal Server Error

301 Moved Permanently 或 302 Found

@RequestParam

@RequestParam VS @PathVariable区别

1. 参数位置

2. 参数必要性

3. 参数类型

4. 使用场景

Springboot注解

启动类注解

配置文件注解

SpringCloud常用标签

服务发现相关注解

@EnableEurekaClient

@EnableDiscoveryClient

服务调用相关注解

@FeignClient

熔断相关注解

@EnableCircuitBreaker

@HystrixCommand

配置管理相关注解

@RefreshScope

网关路由相关注解

@EnableZuulProxy

@EnableGateway

Spring Cloud Alibaba

服务发现与注册:Nacos

@EnableDiscoveryClient

分布式配置管理:Nacos Config

@RefreshScope

熔断与限流:Sentinel

@SentinelResource

分布式事务:Seata

@GlobalTransactional

消息驱动:RocketMQ

@RocketMQMessageListener

负载均衡:Spring Cloud LoadBalancer

@LoadBalanced


在 Java 里,自定义注解可以借助 @interface 关键字来创建。注解本质上是一种特殊的接口,它能为代码元素(像类、方法、字段等)添加额外信息。下面会详细阐述自定义注解的定义、使用、元注解以及示例代码。

定义自定义注解

使用 @interface 关键字来定义一个注解,语法如下:

public @interface 注解名 {// 注解属性数据类型 属性名() default 默认值;
}

注解属性的类型可以是基本数据类型、StringClass、枚举类型、注解类型,或者是这些类型的数组。若不设置 default 值,那么在使用注解时就必须为该属性赋值。

元注解

元注解是用于注解注解的注解,Java 提供了几个元注解,用于指定自定义注解的使用范围和生命周期等信息:

  • @Retention:指定注解的保留策略,有 RetentionPolicy.SOURCE(只在源代码中保留,编译时会被丢弃)、RetentionPolicy.CLASS(编译时保留在字节码中,但运行时不可用)和 RetentionPolicy.RUNTIME(运行时保留,可通过反射获取)。
  • @Target:指定注解可以应用的目标元素类型,如 ElementType.TYPE(类、接口、枚举)、ElementType.METHOD(方法)、ElementType.FIELD(字段)等。
  • @Documented:将注解包含在 JavaDoc 中。
  • @Inherited:允许子类继承父类的注解。

示例代码

以下是一个自定义注解的示例,该注解用于标记方法的执行时间统计:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;// 定义一个自定义注解,用于标记需要统计执行时间的方法
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ExecutionTime {// 定义一个属性,用于指定是否记录详细信息,默认值为 falseboolean logDetails() default false;
}

上述代码定义了一个名为 ExecutionTime 的注解,它可以应用于方法上,并且有一个 logDetails 属性,默认值为 false

使用自定义注解

下面是使用 ExecutionTime 注解的示例:

public class MyService {// 使用 ExecutionTime 注解标记该方法,指定 logDetails 为 true@ExecutionTime(logDetails = true)public void doSomething() {try {// 模拟方法执行,线程休眠 2 秒Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}
}

在上述代码中,MyService 类的 doSomething 方法使用了 ExecutionTime 注解,并将 logDetails 属性设置为 true

通过反射获取注解信息

可以通过反射机制在运行时获取注解信息,以下是一个示例:

import java.lang.reflect.Method;public class AnnotationProcessor {public static void main(String[] args) throws NoSuchMethodException {// 获取 MyService 类的 Class 对象Class<?> clazz = MyService.class;// 获取 doSomething 方法的 Method 对象Method method = clazz.getMethod("doSomething");// 检查方法是否有 ExecutionTime 注解if (method.isAnnotationPresent(ExecutionTime.class)) {// 获取 ExecutionTime 注解的实例ExecutionTime annotation = method.getAnnotation(ExecutionTime.class);// 输出 logDetails 属性的值System.out.println("Log details: " + annotation.logDetails());}}
}

在上述代码中,AnnotationProcessor 类通过反射获取 MyService 类的 doSomething 方法,并检查该方法是否有 ExecutionTime 注解。如果有,则获取注解的实例并输出 logDetails 属性的值。

综上所述,自定义注解能够为代码添加额外的元数据,并且可以在运行时通过反射机制获取这些元数据,从而实现一些特定的功能,如日志记录、权限验证等。

更全面参考:

https://zhuanlan.zhihu.com/p/60730622

常见的注解

Spring注解

组件扫描与 Bean 定义

 @Component 组件,没有明确的角色

 @Service 在业务逻辑层使用(service层)

 @Repository 在数据访问层使用(dao层)

 @Controller 在展现层使用,控制器的声明(C)

依赖注入:@Autowired:由Spring提供 @qualifier 定义名称

当存在多个相同类型的 Bean 时,@Autowired 无法确定具体注入哪个 Bean,此时可以使用 @Qualifier 注解指定要注入的 Bean 的名称。

@Qualifier

如果一个接口有多个实现,那么注入时候加上唯一标示

  1. 作用:与@Autowired结合使用,用于指定具体的 Bean 名称进行依赖注入。当有多个类型相同的 Bean 可供选择时,可以使用@Qualifier来明确指定要注入的 Bean。
  2. 使用场景:当自动装配存在多个候选 Bean 时,使用@Qualifier指定具体的 Bean 名称以消除歧义。

              @Resource:由java提供

                默认按照名称进行注入,如果找不到匹配的名称,则按照类型进行注入。

@Bean 使用在方法上,声明当前方法的返回值存入spring容器中。 

@Scope 标注bean的范围【Singleton  默认,Prototype  原型】

@ComponentScan 用于指定spring初始化容器时要扫描的包

@Import 使用@import导入的类会被spring加载到IOC容器中

@Component、@Controller、@Service和@Repository区别

都是 Spring 框架中的注解

@Component是一个通用的组件注解,用于标记任何 Spring 可以管理的类,将其定义为一个 Spring 组件。它是最基础的注解,其他三个注解在某种程度上是对@Component的细化。当一个类被标记为@Component时,Spring 会扫描到它,并将其纳入 Spring 容器管理,可用于实现一些通用的功能模块,这些模块没有明确的分层界限。

@Controller主要用于定义 Spring MVC 中的控制器类,用于处理 HTTP 请求。它是一种特殊的 @Component,专门用于构建 Web 应用程序的前端交互逻辑。@Controller类中的方法通常会结合@RequestMapping等请求映射注解,将 HTTP 请求路径与方法进行关联,使得外部请求能够被正确接收和处理,并且返回结果给客户端。

@Service用于标记业务逻辑层的类。它明确地将一个类定义在业务逻辑层面,强调该类包含业务相关的操作。在实际应用中,@Service类通常会调用@Repository标记的数据访问层类来获取数据,然后进行业务处理。这有助于在复杂的业务场景中,清晰地划分和管理不同层次的功能,方便开发人员对业务逻辑的维护和扩展。

@Repository用于标注数据访问层的类,比如操作数据库的 DAO(Data Access Object)类。除了具有将类纳入 Spring 容器管理的功能外,它还提供了额外的功能,如自动将数据访问层的原生异常转换为 Spring 的统一数据访问异常,这使得在处理数据访问异常时,代码更加整洁和统一,提高了整个数据访问层的健壮性。

AOP

@Aspect、@Before、@After、@Around、@pointcut 用于切面编程

  • @Aspect:用于标识一个切面类,该类中可以定义切入点和通知。
@Aspect
@Component
public class LoggingAspect {// 切入点和通知的定义
}
  • @Before:前置通知注解,用于在目标方法执行之前执行指定的增强逻辑。
@Before("execution(* com.example.service.*.*(..))")
public void beforeAdvice() {// 前置通知的逻辑
}
  • @After:后置通知注解,无论目标方法是否正常执行结束,都会在目标方法执行之后执行指定的增强逻辑。
@After("execution(* com.example.service.*.*(..))")
public void afterAdvice() {// 后置通知的逻辑
}
  • @Around:环绕通知注解,它可以在目标方法执行前后都进行增强处理,并且可以控制目标方法是否执行。
@Around("execution(* com.example.service.*.*(..))")
public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {// 前置处理Object result = joinPoint.proceed();// 后置处理return result;
}

用于配置

@Configuration:

功能:用于定义配置类,代替传统的 XML 配置文件来配置 Spring 容器。

标注了这个注解的类内部可以使用@Bean注解来定义 Bean。

示例:@Configuration public class AppConfig {...}定义了一个 Spring 配置类。

@PropertySource:

功能:用于加载外部的属性文件,通常用于配置数据库连接信息、

应用程序的配置参数等。

示例:@PropertySource("classpath:application.properties")

 public class AppConfig {...}加载了application.properties文件。

Springmvc注解

Spring MVC 提供了一系列注解,这些注解能极大简化 Web 应用开发过程,下面从不同功能维度为你介绍 Spring MVC 常用注解。

控制器相关注解

  • @Controller:用于标识一个类为 Spring MVC 的控制器,它是 @Component 的特殊化注解,被 Spring 框架扫描并注册为 Bean,处理 HTTP 请求。
@Controller
public class UserController {// 控制器方法
}
  • @RestController:这是 @Controller 和 @ResponseBody 的组合注解。使用 @RestController 注解的类,其所有方法返回的数据会直接作为响应体输出,常用于构建 RESTful API。
@RestController
public class UserRestController {// RESTful API 方法
}

请求映射注解

  • @RequestMapping:可用于类和方法上,用于将 HTTP 请求映射到控制器的处理方法。它能指定请求的 URL、请求方法(GET、POST 等)、请求参数等。
  • @GetMapping:是 @RequestMapping(method = RequestMethod.GET) 的快捷方式,专门用于处理 HTTP GET 请求。
@RestController
@RequestMapping("/users")
public class UserController {@GetMapping("/{id}")public User getUser(@PathVariable("id") Long id) {// 返回用户信息return new User();}
}
  • @PostMapping@RequestMapping(method = RequestMethod.POST) 的快捷方式,用于处理 HTTP POST 请求,常用来创建资源。
@RestController
@RequestMapping("/users")
public class UserController {@PostMappingpublic User createUser(@RequestBody User user) {// 创建用户的逻辑return user;}
}
  • @PutMapping@RequestMapping(method = RequestMethod.PUT) 的快捷方式,处理 HTTP PUT 请求,通常用于更新资源。
@RestController
@RequestMapping("/users")
public class UserController {@PutMapping("/{id}")public User updateUser(@PathVariable("id") Long id, @RequestBody User user) {// 更新用户信息的逻辑return user;}
}
  • @DeleteMapping@RequestMapping(method = RequestMethod.DELETE) 的快捷方式,处理 HTTP DELETE 请求,用于删除资源。
@RestController
@RequestMapping("/users")
public class UserController {@DeleteMapping("/{id}")public void deleteUser(@PathVariable("id") Long id) {// 删除用户的逻辑}
}

请求参数注解

  • @PathVariable:用于获取 URL 中的路径变量
@RestController
@RequestMapping("/users")
public class UserController {@GetMapping("/{id}")public User getUser(@PathVariable("id") Long id) {// 根据路径变量 id 获取用户信息return new User();}
}

  • @RequestParam:用于获取请求参数,可处理 GET 请求的查询参数或 POST 请求的表单参数
@RestController
@RequestMapping("/users")
public class UserController {@GetMappingpublic List<User> getUsers(@RequestParam(value = "name", required = false) String name) {// 根据请求参数 name 查询用户列表return new ArrayList<>();}
}

  • @RequestBody:用于将请求体中的数据绑定到方法的参数上,常用于处理 JSON 或 XML 格式的数据。
@RestController
@RequestMapping("/users")
public class UserController {@PostMappingpublic User createUser(@RequestBody User user) {// 根据请求体中的用户信息创建用户return user;}
}

  • @RequestHeader:用于获取请求头中的信息。
@RestController
@RequestMapping("/users")
public class UserController {@GetMappingpublic String getUsers(@RequestHeader("User-Agent") String userAgent) {// 获取请求头中的 User-Agent 信息return userAgent;}
}

  • @CookieValue:用于获取请求中的 Cookie 值。
@RestController
@RequestMapping("/users")
public class UserController {@GetMappingpublic String getUsers(@CookieValue("JSESSIONID") String sessionId) {// 获取请求中的 JSESSIONID Cookie 值return sessionId;}
}

响应相关注解

  • @ResponseBody:用于将方法的返回值直接作为响应体返回给客户端,常用于返回 JSON 或 XML 数据。
@Controller
public class UserController {@GetMapping("/users/{id}")@ResponseBodypublic User getUser(@PathVariable("id") Long id) {// 返回用户信息作为响应体return new User();}
}

  • @ResponseStatus:用于设置 HTTP 响应状态码。
@RestController
@RequestMapping("/users")
public class UserController {@DeleteMapping("/{id}")@ResponseStatus(HttpStatus.NO_CONTENT)public void deleteUser(@PathVariable("id") Long id) {// 删除用户的逻辑}
}

异常处理注解

  • @ExceptionHandler:用于处理控制器中抛出的异常。
@Controller
public class UserController {@GetMapping("/users/{id}")public String getUser(@PathVariable("id") Long id) {if (id < 0) {throw new IllegalArgumentException("Invalid user ID");}return "user";}@ExceptionHandler(IllegalArgumentException.class)public String handleIllegalArgumentException(IllegalArgumentException e) {// 处理 IllegalArgumentException 异常return "error";}
}

  • @ControllerAdvice:用于定义全局异常处理类,结合 @ExceptionHandler 可以处理所有控制器中抛出的异常。
@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public String handleException(Exception e) {// 处理所有异常return "error";}
}

 

@RequestMapping

用于映射请求路径,可以定义在类上和方法上。用于类上,则表示所有方法都以该地址作为父路径

@GetMapping

Spring MVC 注解,用来映射 GET 请求,它是一个组合注解,相当于 @RequestMapping(method = RequestMethod.GET) 。

@PostMapping

Spring MVC 注解,用来映射 POST 请求,它是一个组合注解,相当于 @RequestMapping(method = RequestMethod.POST) 。

@RequestParam

请求参数的名称

@PathVariable

从请求路径下中获取请求参数{/user/{id}},传递给方法的形式参数

@RequestHeader

获取请求头信息

@CookieValue

获取cookie

@RequestBody

接收前端传过来的json对象,将json转为java对象

@ResponseBody

返回json对象响应给客户端

@RestController

@Controller +@ResponseBody

@RequestMapping (value=’’,method={RequestMethod。GET或者POSt})绑定url

@RequestParam (value=’’ required=false)绑定参数,将客户端请求中的参数值映射到相应方法的参数上;

Post 接口, get 请求,收到的状态码是多少?

405

405 Method Not Allowed

  • 含义:此状态码表明客户端使用的请求方法(这里是 GET)不被目标资源所允许。服务器知道客户端请求的资源,但不支持使用当前的请求方法来访问该资源。
  • 示例:在 Java 的 Spring MVC 框架中,若一个控制器方法使用 @PostMapping 注解来处理 POST 请求,当客户端发送 GET 请求时,服务器就会返回 405 状态码。

400 Bad Request

  • 含义:该状态码表示客户端发送的请求存在语法错误或无法被服务器理解。虽然 GET 请求本身没有语法错误,但有些服务器可能会将不恰当的请求方法视为一种错误的请求,从而返回 400 状态码。
  • 示例:在一些自定义的服务器实现中,可能会对请求方法进行严格的验证,如果发现请求方法不符合接口的预期,就会返回 400 状态码。

500 Internal Server Error

  • 含义:这表示服务器在处理请求时发生了内部错误,无法完成请求。出现这种情况可能是因为服务器端的代码逻辑存在问题,没有正确处理不匹配的请求方法。
  • 示例:若服务器端代码在处理请求时没有对请求方法进行有效的检查,直接尝试按照 POST 请求的逻辑处理 GET 请求,可能会导致程序抛出异常,最终返回 500 状态码。

301 Moved Permanently 或 302 Found

  • 含义:这两个状态码表示重定向。在某些特殊情况下,服务器可能会将 GET 请求重定向到另一个合适的资源或接口,从而返回 301 或 302 状态码。不过这种情况相对较少,通常是服务器端为了引导用户到正确的资源而进行的设置。

@RequestParam

将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)

语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)

value:参数名

required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不  包含就报错。

defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果  没有传该参数,就使用默认值

@RequestParam VS @PathVariable区别

1. 参数位置

  • @RequestParam:主要用于获取请求的查询参数(GET 请求的 URL 后面的参数部分,或 POST 请求的表单参数)。查询参数通常以键值对的形式出现在 URL 的问号后面,多个参数之间用 & 分隔。
  • @RequestParam:/manongyanjiuseng?age=18&name="zxh“”
// 请求 URL: /users?name=John&age=25
@GetMapping("/users")
public String getUsers(@RequestParam("name") String name, @RequestParam("age") int age) {// 处理逻辑return "users";
}

  • @PathVariable:用于获取 URL 路径中的变量。路径变量是 URL 的一部分,通常用于标识资源的唯一标识符。
// 请求 URL: /users/123
@GetMapping("/users/{id}")
public String getUser(@PathVariable("id") Long id) {// 处理逻辑return "user";
}

2. 参数必要性

  • @RequestParam:参数的必要性可以通过 required 属性进行控制。required 属性默认为 true,表示该参数是必需的,如果请求中没有提供该参数,会抛出 MissingServletRequestParameterException 异常;若将 required 属性设置为 false,则该参数是可选的。
@GetMapping("/users")
public String getUsers(@RequestParam(value = "name", required = false) String name) {// 处理逻辑return "users";
}
  • @PathVariable:路径变量是 URL 的一部分,通常是必需的。如果 URL 中没有包含对应的路径变量,请求将无法匹配到相应的处理方法。

3. 参数类型

  • @RequestParam:可以处理多种类型的参数,包括基本数据类型、字符串、数组、集合等。Spring MVC 会自动将请求参数转换为方法参数的类型。
@GetMapping("/users")
public String getUsers(@RequestParam("ids") List<Long> ids) {// 处理逻辑return "users";
}

  • @PathVariable:同样可以处理多种类型的参数,但需要注意的是,路径变量的值通常是字符串类型,Spring MVC 会尝试将其转换为方法参数的类型。如果转换失败,会抛出 TypeMismatchException 异常。
@GetMapping("/users/{id}")
public String getUser(@PathVariable("id") Long id) {// 处理逻辑return "user";
}

4. 使用场景

  • @RequestParam:适用于传递可选的、用于筛选或查询的参数。例如,在搜索功能中,用户可以根据不同的条件进行搜索,这些条件可以作为查询参数传递。
@GetMapping("/search")
public String search(@RequestParam(value = "keyword", required = false) String keyword,@RequestParam(value = "category", required = false) String category) {// 处理搜索逻辑return "searchResults";
}
  • @PathVariable:适用于标识资源的唯一标识符,如用户 ID、文章 ID 等。通过路径变量可以方便地定位到具体的资源。
@GetMapping("/articles/{articleId}")
public String getArticle(@PathVariable("articleId") Long articleId) {// 处理获取文章逻辑return "article";
}

综上所述,@RequestParam 和 @PathVariable 在参数位置、必要性、类型和使用场景上都存在明显的区别,开发者需要根据具体的需求选择合适的注解来获取请求参数。

Springboot注解

启动类注解
  • @SpringBootApplication:这是一个组合注解,包含了 @SpringBootConfiguration@EnableAutoConfiguration 和 @ComponentScan 三个注解的功能。它用于标记 Spring Boot 应用的主类,启动 Spring Boot 应用时会自动进行组件扫描和自动配置。

@Configuration表明这个类是一个配置类,可以在其中定义 Bean 和配置信息。@EnableAutoConfiguration自动配置 Spring Boot 应用,根据类路径中的依赖和配置,自动配置相关的组件,例如,当引入了 Spring Data JPA 依赖,会自动配置 JPA 相关的内容。@ComponentScan: 组件扫描,可自动发现和装配一些Bean。( web开发的同学一定都有用过会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。)

@RestController

@Controller和@ResponseBody的组合,用于定义 RESTful 风格的控制器,方法的返回值会直接转换为 JSON 或其他格式并返回给客户端,无需再使用@ResponseBody单独标注方法。@RequestMapping用于映射 HTTP 请求路径到控制器的方法,它可以定义在类级别和方法级别,类级别的@RequestMapping定义了一个基本路径,方法级别的@RequestMapping在基本路径基础上进一步细化路径。

配置文件注解
  • @Value用于从配置文件(如 application.properties 或 application.yml)中获取配置值并注入到 Bean 的字段中。
@Component
public class MyConfig {@Value("${my.property}")private String myProperty;// 其他方法
}
  • @ConfigurationProperties用于将配置文件中的属性批量绑定到一个 Java Bean 中,通常与 @EnableConfigurationProperties 一起使用。
@ConfigurationProperties(prefix = "my")
public class MyProperties {private String property;// getter 和 setter 方法
}

@SpringBootApplication
@EnableConfigurationProperties(MyProperties.class)
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

@Value(“${}”)可以注入properties里面的配置项

Spring boot application.properties配置的属性的值。

@Conditional 条件化注解

@ConditionalOnBean(A.class)仅仅在当前上下文中存在A对象时,才会实例化一个Bean,

@ConditionalOnMissingBean(A.class) 仅仅在当前上下文中不存在A对象时,才会实例化一个Bean

@ConditionalOnWebApplication

@Scheduled,按指定执行周期执行方法

@CrossOrigin 可以处理跨域请求,让你能访问不是一个域的文件;

@Import 导入其他配置类

@ImportResource 和@Import类似,区别就是@ImportResource导入的是配置文件

@Enable*注解说明,这些注解主要用来开启对xxx的支持。

@Transactional (readOnly=true)注解式事务

@TransactionalEventListener用于配置事务的回调方法,可以在事务提交前、提交后、完成后

@EnableWebMvc 在配置类中开启Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若无此句,重写WebMvcConfigurerAdapter方法(用于对SpringMVC的配置)。

@EnableAutoConfiguration  打开自动配置

@EnableAspectJAutoConfiguration用于自动配置 AspectJ 切面相关的内容,开启 Spring Boot 对 AspectJ 的支持。

@EnableAspectJAutoProxy 开启对AspectJ自动代理的支持

@EnableWebMvc 开启Web MVC的配置支持

@EnableConfigurationProperties 开启对@ConfigurationProperties注解配置Bean的支持

@EnableJpaRepositories 开启对SpringData JPA Repository的支持

@EnableTransactionManagement 开启注解式事务的支持

@EnableCaching 开启注解式的缓存支持

@EnableScheduling,开启定时任务功能

@EnableAsync,开启方法异步执行的能力,通过@Async或者自定义注解找到需要异步执行的方法。通过实现AsyncConfigurer接口的

getAsyncExecutor()和getAsyncUncaughtExceptionHandler()方法自定义Executor和异常处理。

@Async,标记方法为异步线程中执行

@EnableConfigurationProperties,启动@ConfigurationProperties功能

@EnableCaching 注解自动化配置合适的缓存管理器。

@EnableWebSecurity 注解开启spring security的功能,集成websercrityconfigureadapter。

  1. swagger

@ApiOperation 首先@ApiOperation注解不是Spring自带的,它是是swagger里的注解@ApiOperation是用来构建Api文档的@ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”;

SpringCloud常用标签

服务发现相关注解

@EnableEurekaClient
  • 作用:在 Spring Cloud Eureka 中,用于标记一个服务为 Eureka 客户端,使其能够将自身服务信息注册到 Eureka 服务注册中心,同时也可以从该中心获取其他服务的信息。
  • 示例代码

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.client.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient
public class MyServiceApplication {public static void main(String[] args) {SpringApplication.run(MyServiceApplication.class, args);}
}
@EnableDiscoveryClient
  • 作用:这是一个通用的服务发现客户端注解,可用于不同的服务发现组件(如 Eureka、Consul、Zookeeper 等),使用该注解的服务会自动注册到配置好的服务发现中心。
  • 示例代码: 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class MyServiceApp {public static void main(String[] args) {SpringApplication.run(MyServiceApp.class, args);}
}

服务调用相关注解

@FeignClient
  • 作用:在 Spring Cloud OpenFeign 中,用于定义一个 Feign 客户端接口,通过声明式的方式调用远程服务。Feign 会根据接口的定义自动生成代理对象,将 HTTP 请求封装成方法调用。
  • 示例代码
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;@FeignClient(name = "user-service")
public interface UserServiceClient {@GetMapping("/users")String getUsers();
}

熔断相关注解

@EnableCircuitBreaker
  • 作用:用于启用 Spring Cloud Circuit Breaker 熔断器功能,开启后可以对服务调用进行熔断保护,防止因某个服务故障导致整个系统崩溃。
  • 示例代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;@SpringBootApplication
@EnableCircuitBreaker
public class MyAppWithCircuitBreaker {public static void main(String[] args) {SpringApplication.run(MyAppWithCircuitBreaker.class, args);}
}
@HystrixCommand
  • 作用:在使用 Netflix Hystrix 熔断器时,用于标记一个方法为熔断方法,并可以指定熔断后的降级方法。当被标记的方法调用失败时,会自动调用降级方法返回备用结果。
  • 示例代码
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.stereotype.Service;@Service
public class UserService {@HystrixCommand(fallbackMethod = "fallbackGetUser")public String getUser(String id) {// 模拟调用远程服务throw new RuntimeException("Service call failed");}public String fallbackGetUser(String id) {return "Default user info";}
}

配置管理相关注解

@RefreshScope
  • 作用:在 Spring Cloud Config 中,当配置发生变化时,使用 @RefreshScope 注解的 Bean 可以在不重启应用的情况下刷新配置。
  • 示例代码
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;@Component
@RefreshScope
@ConfigurationProperties(prefix = "myconfig")
public class MyConfig {private String property;public String getProperty() {return property;}public void setProperty(String property) {this.property = property;}
}

网关路由相关注解

@EnableZuulProxy
  • 作用:在 Spring Cloud Zuul 中,用于启用 Zuul 代理功能,将 Zuul 作为 API 网关,对请求进行路由和过滤。
  • 示例代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication
@EnableZuulProxy
public class ApiGatewayApplication {public static void main(String[] args) {SpringApplication.run(ApiGatewayApplication.class, args);}
}
@EnableGateway
  • 作用:在 Spring Cloud Gateway 中,用于启用 Spring Cloud Gateway 功能,创建一个基于响应式编程的 API 网关。
  • 示例代码

@EnableAdminServer 使用admin监控应用。

@EnableHystrix表示启动断路器,断路器依赖于服务注册和发现。

@HystrixCommand注解方法失败后,系统将西东切换到fallbackMethod方法执行。指定回调    方法

@RefreshScope 如果代码中需要动态刷新配置,在需要的类上加上该注解就行。但某些复    杂的注入场景下,这个注解使用不当,配置可能仍然不动态刷新;

@FeignClient springboot调用外部接口:声明接口之后,在代码中通过@Resource注入之后即可使用。@FeignClient标签的常用属性如下:name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现

@EnableCircuitBreaker 开启断路器功能

@LoadBalanced 开启客户端负载均衡

@RibbonClient,这个注解用来为负载均衡客户端做一些自定义的配置,可以进一步配置或自定义从哪里获取服务端列表、负载均衡策略、Ping也就是服务鉴活策略等等

@InitBinder 一般用于controller 可以将所以form 讲所有传递进来的string 进行html编码,防止xss攻击,比如可以将字符串类型的日期转换成date类型

https://blog.csdn.net/u014666697/java/article/details/90756644

Spring Cloud Alibaba

是 Spring Cloud 生态体系下的一个子项目,它为分布式应用开发提供了一系列组件和工具,下面为你介绍 Spring Cloud Alibaba 中一些常用的注解。

服务发现与注册:Nacos

@EnableDiscoveryClient
  • 作用:此注解并非 Spring Cloud Alibaba 特有,但在使用 Nacos 作为服务注册与发现中心时经常会用到。它能让应用将自身注册到 Nacos 服务中心,同时也可以从 Nacos 中获取其他服务的实例信息。
  • 示例代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class MyServiceApplication {public static void main(String[] args) {SpringApplication.run(MyServiceApplication.class, args);}
}

分布式配置管理:Nacos Config

@RefreshScope
  • 作用:在使用 Nacos 进行分布式配置管理时,当 Nacos 中的配置发生变化,使用 @RefreshScope 注解的 Bean 可以在不重启应用的情况下刷新配置。
  • 示例代码
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;@Component
@RefreshScope
@ConfigurationProperties(prefix = "myconfig")
public class MyConfig {@Value("${my.property}")private String property;public String getProperty() {return property;}public void setProperty(String property) {this.property = property;}
}

熔断与限流:Sentinel

@SentinelResource
  • 作用:该注解用于标记需要进行限流、熔断、降级等流量控制的资源。可以指定资源名称、限流降级规则、异常处理方法等。
  • 示例代码
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.stereotype.Service;@Service
public class MyService {@SentinelResource(value = "myResource", blockHandler = "handleBlock")public String doSomething() {return "Normal response";}public String handleBlock(BlockException ex) {return "Blocked by Sentinel: " + ex.getClass().getSimpleName();}
}

分布式事务:Seata

@GlobalTransactional
  • 作用:在使用 Seata 进行分布式事务管理时,使用 @GlobalTransactional 注解可以将一个方法标记为全局事务的入口点,Seata 会自动管理该方法及其调用的其他服务方法的事务一致性。
  • 示例代码
import io.seata.spring.annotation.GlobalTransactional;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class OrderService {@GlobalTransactional@Transactionalpublic void createOrder() {// 创建订单的业务逻辑}
}

消息驱动:RocketMQ

@RocketMQMessageListener
  • 作用:用于标记一个类为 RocketMQ 消息监听器,指定监听的主题、消费组等信息,当有消息到达指定主题时,该监听器会处理消息。
  • 示例代码

import com.alibaba.rocketmq.spring.annotation.RocketMQMessageListener;
import com.alibaba.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Service;@Service
@RocketMQMessageListener(topic = "myTopic", consumerGroup = "myConsumerGroup")
public class MyMessageListener implements RocketMQListener<String> {@Overridepublic void onMessage(String message) {System.out.println("Received message: " + message);}
}

负载均衡:Spring Cloud LoadBalancer

虽然 Spring Cloud LoadBalancer 不是 Spring Cloud Alibaba 特有的组件,但在 Spring Cloud Alibaba 生态中也会使用到,它和 Nacos 等组件配合实现服务的负载均衡。通常结合 @LoadBalanced 注解使用。

@LoadBalanced
  • 作用:在使用 RestTemplate 或 WebClient 进行服务调用时,使用 @LoadBalanced 注解可以让 Spring Cloud LoadBalancer 为请求自动选择合适的服务实例进行负载均衡。
  • 示例代码
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class AppConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}
http://www.dtcms.com/wzjs/80260.html

相关文章:

  • 网站怎么做引流呢交换链接案例
  • 做外贸网站一定要会英语吗seo系统培训班
  • 银行门户网站建设pptwindows优化大师官方免费下载
  • wordpress菜单实现下拉搜索引擎外部链接优化
  • wordpress用户名或密码错误宁波seo整站优化软件
  • 小当网 绵阳网站建设苏州百度推广开户
  • 泗水县城乡建设局网站百度指数官网移动版
  • 17网站一起做网店普宁轻纺城温馨百度经验发布平台
  • 专门做软陶的网站桂林市天气预报
  • 网上做调查问卷的网站app营销模式有哪些
  • 网站截图怎么做百度精简版网页入口
  • 网站建设在会计里算什么资产it培训机构排名
  • 扬州专业外贸网站建设推广安卓手机优化
  • 网站开发和游戏开发搜索引擎最佳化
  • 网站建设施工图片百度推广怎么赚钱
  • 中国建盏大师排名2021西安网站优化
  • 网站建设的步骤教程郑州seo全网营销
  • 企业网站建设技术社群营销的十大案例
  • bmob后端云网站开发sem是什么基团
  • 日本 女做视频网站百度快照推广有效果吗
  • cc后缀网站seo优化教程视频
  • 效果好的郑州网站建设预防电信网络诈骗
  • 成都创新互联网站建设杭州网站优化多少钱
  • 三级域名大全百度竞价和优化的区别
  • 内存128mb做网站够吗seo网站优化策划书
  • 公益环保网站建设百度推广怎么找客户
  • 阿里巴巴做国际网站多少钱搜索引擎优化方法案例
  • wordpress 自动webp深圳seo优化公司哪家好
  • 如何做淘宝宜家代购网站公司网站制作公司
  • 哪家网站雅虎全球购做的好b2b电商平台