Spring - 40 anotaciones comunes de Spring Boot

1. Anotaciones Spring Web MVC

1.1, @RequestMapping

El propósito principal de la anotación @RequestMapping es mapear solicitudes web con métodos en la clase de procesamiento de solicitudes. Tanto Spring MVC como Spring WebFlux brindan soporte para la anotación @RequestMapping a través de las clases RquestMappingHandlerMapping y RequestMappingHndlerAdapter .

La anotación @RequestMapping anota el método de procesamiento de solicitudes en la clase de procesamiento de solicitudes; la anotación @RequestMapping tiene las siguientes seis propiedades de configuración:

  • valor: la URL de solicitud asignada o su alias

  • método: nombre de método compatible con HTTP

  • params: filtre las solicitudes según la presencia, el valor predeterminado o el valor de los parámetros HTTP

  • encabezado: filtre las solicitudes según la presencia, el valor predeterminado o el valor del encabezado HTTP

  • consumir: establezca los tipos de medios permitidos en el cuerpo de la solicitud HTTP

  • producto: tipos de medios permitidos en el cuerpo de respuesta HTTP

Sugerencia: las clases de manejo de solicitudes también deben marcarse con @Controller o @RestController antes de usar @RequestMapping

Aquí hay dos ejemplos del uso de @RequestMapping:

imagen

@RequestMapping también puede marcar clases, de modo que cuando el método de procesamiento en la clase asigne la ruta de solicitud, empalmará automáticamente el valor establecido por @RequestMapping en la clase antes de la ruta de asignación en el método, de la siguiente manera:

imagen

1.2, @RequestBody

@RequestBody se usa en la lista de parámetros del método de solicitud de procesamiento. Puede vincular los parámetros en el cuerpo de la solicitud a un objeto. Los parámetros del cuerpo de la solicitud se pasan a través de HttpMessageConverter , y los nombres de los parámetros en el cuerpo de la solicitud se comparan con los nombres de las propiedades. del objeto y vincular el valor. Además, los parámetros en el cuerpo de la solicitud también se pueden verificar a través de la anotación @Valid. Aquí hay un ejemplo usando @RequestBody:

imagen

1.3, @GetMapping

La anotación @GetMapping se usa para procesar solicitudes HTTP GET y asignar solicitudes a métodos de procesamiento específicos.

Específicamente, @GetMapping es una anotación compuesta, que es equivalente a un atajo para @RequestMapping(method=RequestMethod.GET).

Aquí hay un ejemplo del uso de @GetMapping:

imagen

1.4, @PostMapeo

La anotación @PostMapping se usa para procesar solicitudes HTTP POST y asignar solicitudes a métodos de procesamiento específicos.

Al igual que @GetMapping, @PostMapping también es una anotación compuesta, que equivale a un atajo para @RequestMapping(method=HttpMethod.POST).

Aquí hay un ejemplo usando @PostMapping:

imagen

1.5, @PutMapping

La anotación @PutMapping se utiliza para procesar solicitudes HTTP PUT y asignar solicitudes a métodos de procesamiento específicos.

@PutMapping es una anotación combinada, equivalente a un atajo para @RequestMapping(method=HttpMethod.PUT).

Aquí hay un ejemplo usando @PutMapping:

imagen

1.6, @DeleteMapping

La anotación @DeleteMapping se usa para manejar solicitudes de DELETE HTTP y asigna solicitudes para eliminar métodos.

@DeleteMapping es una anotación compuesta, que es equivalente a un atajo para @RequestMapping(method=HttpMethod.DELETE).

Aquí hay un ejemplo usando @DeleteMapping:

 

imagen

1.7, @PatchMapping

La anotación @PatchMapping se usa para procesar solicitudes HTTP PATCH y asignar solicitudes a los métodos de procesamiento correspondientes.

@PatchMapping es equivalente a un atajo para @RequestMapping(method=HttpMethod.PATCH).

Aquí hay un ejemplo simple:

imagen

1.8, @ControllerAdvice

@ControllerAdvice es una extensión de la anotación @Component, y Spring escaneará y detectará automáticamente las clases marcadas con @ControllerAdvice. @ControllerAdvice debe usarse con las anotaciones @ExceptionHandler, @InitBinder y @ModelAttribute, principalmente para manejar la información de excepción lanzada por el controlador.

Primero, necesitamos definir una clase anotada con @ControllerAdvice, en esta clase, defina un método para manejar excepciones específicas y márquelas con la anotación @ExceptionHandler.

Además, cuando sea necesario, puede usar @InitBinder para la configuración global en la clase y puede usar @ModelAttribute para configurar los parámetros relacionados con la vista. Con la anotación @ControllerAdvice, puede crear rápidamente una clase de manejo de excepciones unificada y personalizada.

Aquí hay un código de ejemplo usando @ControllerAdvice:

imagen

1.9, @ResponseBody

@ResponseBody escribirá automáticamente el valor de retorno del método en el controlador en la respuesta HTTP.

En particular, la anotación @ResponseBody solo se puede usar en clases marcadas con la anotación @Controller.

Si está en una clase marcada con @RestController, no es necesario anotar el método con la anotación @ResponseBody.

@RestController es equivalente a la anotación combinada de @Controller y @ResponseBody.

A continuación se muestra un ejemplo del uso de esta anotación.

imagen

1.10, @Manejador de excepciones

La anotación @ExceptionHander se usa para anotar métodos que manejan excepciones lanzadas por un tipo específico de clase de excepción. Cuando un método en un controlador lanza una excepción, Spring capturará automáticamente la excepción y pasará la información de la excepción capturada al método anotado con @ExceptionHandler. Aquí hay un ejemplo del uso de esta anotación:

imagen

1.11, @ResponseStatus

La anotación @ResponseStatus puede anotar el método de procesamiento de solicitudes. Usando esta anotación, se puede especificar el ESTADO HTTP requerido para la respuesta. En particular, podemos usar la clase HttpStauts para asignar valores al atributo de valor de esta anotación. Aquí hay un ejemplo usando la anotación @ResponseStatus:

imagen

1.12, @PathVariable

La anotación @PathVariable vincula los parámetros del método a las variables de plantilla en el URI de la solicitud. Puede especificar la variable de plantilla del URI a través de la anotación @RequestMapping y luego usar la anotación @PathVariable para vincular los parámetros del método a la variable de plantilla. En particular, la anotación @PathVariable nos permite usar el atributo value o name para crear un alias del parámetro. Aquí hay un ejemplo del uso de esta anotación:

imagen

El nombre de la variable de la plantilla debe envolverse con "{ }". Si el nombre del parámetro del método es el mismo que el nombre de la variable de la plantilla URI, la definición del alias se puede omitir en @PathVariable. Aquí hay un ejemplo abreviado:

imagen

Sugerencia: si el parámetro es un elemento opcional no obligatorio, puede configurar require = false en @PathVariable

1.13, @RequestParam

La anotación @RequestParam se usa para enlazar los parámetros del método con los parámetros pasados ​​de la solicitud web. Use @RequestParam para acceder fácilmente a los valores de los parámetros de solicitud HTTP. Aquí hay un ejemplo de código que usa esta anotación:

imagen

La configuración de otras propiedades de esta anotación es la misma que la configuración de @PathVariable.En particular, si el parámetro pasado está vacío, también puede establecer un valor predeterminado a través de defaultValue. El código de ejemplo es el siguiente:

imagen

1.14, @controlador

@Controller es una extensión de la anotación @Component, y Spring escaneará y configurará automáticamente las clases anotadas con esta anotación. Esta anotación se usa para anotar los controladores Spring MVC. Aquí hay un código de muestra usando esta anotación:

imagen

1.15, @RestController

@RestController se introdujo en Spring 4.0 y es una anotación de controlador específica. Esta anotación es equivalente a un atajo para @Controller y @ResponseBody. Al usar esta anotación, no es necesario usar la anotación @ResponseBody en el método. Aquí hay un código de muestra usando esta anotación:

imagen

1.16, @ModeloAtributo

Con esta anotación, se puede acceder a un modelo que ya existe en el controlador mediante el nombre de índice del modelo. Aquí hay un ejemplo simple del uso de esta anotación:

imagen

Al igual que con las anotaciones @PathVariable y @RequestParam, si el nombre del parámetro tiene el mismo nombre que el modelo, no es necesario especificar el nombre del índice. El ejemplo abreviado es el siguiente:

imagen

En particular, si un método se anota con @ModelAttribute, Spring vinculará el valor de retorno del método a un modelo específico. Un ejemplo es el siguiente:

imagen

Todos los métodos anotados con la anotación @ModelAttribute se ejecutarán antes de que Spring invoque el método de procesamiento específico.

1.17, @CrossOrigin

La anotación @CrossOrigin proporcionará soporte de invocación entre dominios para clases de procesamiento de solicitudes o métodos de procesamiento de solicitudes. Si anotamos una clase con esta anotación, todos los métodos de la clase obtendrán la capacidad de admitir dominios cruzados. La ventaja de usar esta anotación es que se puede ajustar el comportamiento entre dominios. Un ejemplo del uso de esta anotación es el siguiente:

imagen

1.18, @InitBinder

La anotación @InitBinder se usa para anotar el método de inicialización de WebDataBinder , que se usa para procesar los datos del formulario pasados ​​por la solicitud Http, como formato de tiempo, procesamiento de cadenas, etc. Aquí hay un ejemplo del uso de esta anotación:

imagen

2. Anotación Spring Bean

2.1, @ Escaneo de componentes

La anotación @ComponentScan se usa para configurar el paquete que Spring necesita escanear en busca de clases anotadas con anotaciones de componentes. Puede configurar la ruta del paquete para que se analice configurando su propiedad basePackages o su propiedad de valor. El atributo de valor es un alias para paquetes base. El uso de esta anotación es el siguiente:

imagen

2.2, @Componente

La anotación @Component se usa para anotar una clase de componente común. No tiene un alcance comercial claro, pero solo informa a Spring que la clase anotada debe incorporarse al contenedor Spring Bean y administrarse. Un ejemplo del uso de esta anotación es el siguiente:

imagen

2.3, @Servicio

La anotación @Service es una extensión (caso especial) de @Component, que se utiliza para anotar clases de lógica empresarial. Al igual que la anotación @Component, Spring administra automáticamente las clases anotadas con esta anotación. Aquí hay un ejemplo usando la anotación @Service:

imagen

2.4, @Repositorio

La anotación @Repository también es una extensión de la anotación @Component. Al igual que la anotación @Component, Spring administrará automáticamente las clases anotadas con esta anotación. La anotación @Repository se usa para anotar las clases de persistencia de datos de la capa DAO. El uso de esta anotación es el siguiente:

imagen

3. Anotación de inyección de dependencia de Spring

3.1, @ Depende de

La anotación @DependsOn puede configurar el contenedor Spring IoC para inicializar otros objetos de bean antes de inicializar un bean. Aquí hay un código de muestra para usar esta anotación:

imagen

3.2, @ Frijol

La función principal de la anotación @Bean es informar a Spring que las clases marcadas por esta anotación deberán incluirse en la fábrica de gestión de Bean. El uso de la anotación @Bean es muy simple. Aquí, nos centraremos en el uso de initMethod y destroyMethod en la anotación @Bean. Un ejemplo es el siguiente:

imagen

4. Anotación de Bean Scops

4.1, @alcance

La anotación @Scope se puede usar para definir el alcance de la clase marcada por @Component y el alcance de la clase marcada por @Bean. Los ámbitos limitados por @Scope son: singleton, prototipo, solicitud, sesión, sesión global u otros ámbitos personalizados. El prototipo se utiliza como ejemplo para explicar. Cuando un Spring Bean se declara como prototipo (modo prototipo), el contenedor Spring IoC inicializará una nueva instancia de la clase modificada cada vez que se necesite la clase. Al definir un bean, puede establecer la propiedad de alcance del bean en prototipo: scope="prototype", o puede usar la anotación @Scope para establecerlo, de la siguiente manera:

@Scope(value=ConfigurableBeanFactory.SCOPE_PROPTOTYPE)

A continuación se darán dos formas diferentes de usar la anotación @Scope. El código de ejemplo es el siguiente:

imagen

4.2, patrón único de @Scope

Cuando el alcance de @Scope se establece en Singleton, el contenedor Spring IoC solo inicializará una vez la clase marcada con esta anotación. De forma predeterminada, todas las instancias de clase inicializadas por el contenedor Spring IoC son singletons. En el mismo principio, también hay dos métodos de configuración para esta situación. El código de ejemplo es el siguiente:

imagen

5. Anotaciones de configuración de contenedores

5.1, @autocableado

La anotación @Autowired se usa para marcar las dependencias que Spring resolverá e inyectará. Esta anotación se puede utilizar en constructores, campos y métodos setter.

5.1.1, actuando sobre el constructor

El siguiente es un ejemplo del uso de la anotación @Autowired para anotar un constructor:

imagen

5.1.2, actuando sobre métodos setter

El siguiente es un código de muestra para anotar un método setter con la anotación @Autowired:

imagen

5.1.3, actuando sobre campos

La anotación @Autowired es la más fácil de anotar en un campo. Solo necesita agregar esta anotación al campo correspondiente. El código de ejemplo es el siguiente:

imagen

5.1.4, @Principal

Cuando es necesario configurar múltiples beans del mismo tipo en el sistema, @Primary puede definir la prioridad de estos beans. A continuación se muestra un código de ejemplo para ilustrar esta función:

imagen

Resultado de salida:

this is send DingDing method message.

5.2 @PostConstruct y @PreDestroy

Vale la pena señalar que estas dos anotaciones no pertenecen a Spring, se derivan de las dos anotaciones en JSR-250, ubicadas en common-annotations.jar. La anotación @PostConstruct se utiliza para anotar métodos que deben ejecutarse antes de que Spring inicialice el bean. La anotación @PreDestroy se usa para marcar los métodos que deben ejecutarse antes de que se destruya el bean. El siguiente es el código de ejemplo específico:

imagen

5.3, @Calificador

Cuando hay varios beans del mismo tipo en el sistema, @Autowired no sabe qué clase de implementación elegir para la inyección al realizar la inyección de dependencia. En este punto, podemos ajustar con precisión usando la anotación @Qualifier para ayudar a @Autowired a seleccionar las dependencias correctas. Aquí hay un ejemplo de código para esta anotación:

imagen

6. Anotaciones de Spring Boot

6.1, @SpringBootApplication

La anotación @SpringBootApplication es una anotación de configuración rápida. En la clase marcada por ella, puede definir uno o más beans y activar automáticamente la configuración automática de beans y el escaneo automático de componentes. Esta anotación es equivalente a la combinación de @Configuration, @EnableAutoConfiguration y @ComponentScan. En la clase principal de la aplicación Spring Boot, se usa esta anotación. El código de ejemplo es el siguiente:

SpringBootApplication
public class Application{
 public static void main(String [] args){
   SpringApplication.run(Application.class,args);
 }
}

6.2, @EnableAutoConfiguration

La anotación @EnableAutoConfiguration se usa para notificar a Spring que configure automáticamente los elementos de configuración relacionados con estos paquetes de dependencia en función de los paquetes de dependencia introducidos en el classpath actual.

6.3, @ConditionalOnClass与@ConditionalOnMissingClass

Estas dos anotaciones son anotaciones condicionales de clase y deciden si se realizan determinadas configuraciones en función de la existencia de una determinada clase como base de juicio. Aquí hay un código de muestra simple:

@Configuration
@ConditionalOnClass(DataSource.class)
class MySQLAutoConfiguration {
 //...
}

6.4 @ConditionalOnBean y @ConditionalOnMissingBean

Estas dos anotaciones son anotaciones condicionales de objetos, que deciden si ejecutar ciertos métodos de configuración según si hay un objeto como base. El código de ejemplo es el siguiente:

@Bean
@ConditionalOnBean(name="dataSource")
LocalContainerEntityManagerFactoryBean entityManagerFactory(){
 //...
}
@Bean
@ConditionalOnMissingBean
public MyBean myBean(){
 //...
}

6.5, @CondicionalEnPropiedad

La anotación @ConditionalOnProperty decidirá si ejecutar el método marcado por ella según si los elementos de configuración en el archivo de configuración de Spring cumplen con los requisitos de configuración. El código de ejemplo es el siguiente:

@Bean
@ConditionalOnProperty(name="alipay",havingValue="on")
Alipay alipay(){
 return new Alipay();
}

6.6, @CondicionalEnRecurso

Esta anotación se usa para detectar cuándo existe un archivo de configuración y activar el método marcado por él. El siguiente es un ejemplo de código que usa esta anotación:

@ConditionalOnResource(resources = "classpath:website.properties")
Properties addWebsiteProperties(){
 //...
}

6.7,@CondicionalEnAplicaciónWeb与@CondicionalEnAplicaciónNoWeb

Estas dos anotaciones se utilizan para determinar si la aplicación actual es una aplicación web. Si la aplicación actual es una aplicación web, use Spring WebApplicationContext y defina el ciclo de vida de su sesión. Aquí hay un ejemplo simple:

@ConditionalOnWebApplication
HealthCheckController healthCheckController(){
 //...
}

6.8, @ExpresiónCondicional

Esta anotación nos permite controlar restricciones de configuración basadas en expresiones más detalladas. Cuando la expresión cumple una determinada condición o la expresión es verdadera, se ejecutará el método marcado con esta anotación.

@Bean
@ConditionalException("${localstore} && ${local == 'true'}")
LocalFileStore store(){
 //...
}

6.9, @Condicional

La anotación @Conditional puede controlar condiciones de configuración más complejas. Cuando la anotación de control de condición incorporada de Spring no cumple con los requisitos de la aplicación, puede usar esta anotación para definir condiciones de control personalizadas para cumplir con los requisitos personalizados. Aquí hay un ejemplo simple del uso de esta anotación:

@Conditioanl(CustomConditioanl.class)
CustomProperties addCustomProperties(){
 //...
}

Resumir

Este curso resume el uso de varios tipos de anotaciones comúnmente utilizadas en Spring Boot, para que todos puedan tener una comprensión unificada de las anotaciones comunes en Spring Boot.

Algunas anotaciones que no se usan comúnmente en Spring Boot se complementarán y explicarán más adelante.

Supongo que te gusta

Origin blog.csdn.net/qq_34272760/article/details/121218890
Recomendado
Clasificación