Análisis detallado de 36 anotaciones de botas de resorte, claro de un vistazo

 

1. @ Componente

Función y alcance: cargar el objeto en el contenedor de resorte, la existencia más básica, muchas anotaciones se heredan de él, solo hay un valor de atributo, el valor predeterminado es "",

Ejemplo o código fuente:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component {

 String value() default "";

}

2. @ Servicio

Función y alcance: Generalmente se utiliza para las anotaciones de la capa de servicio, heredando el componente Componente, que es esencialmente el mismo, y conviene distinguir el alcance del negocio.

Ejemplo o código fuente:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {

 @AliasFor(annotation = Component.class)
 String value() default "";

}

3. @ Repositorio

Función y alcance: Las anotaciones que actúan sobre la capa dao. Muchos estudiantes que usan JPA a menudo lo saben. Es esencialmente lo mismo que el Servicio, pero es diferente en el campo empresarial.

Ejemplo o código fuente:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {

 @AliasFor(annotation = Component.class)
 String value() default "";

}

4. @ Controlador

Función y alcance: Las anotaciones que actúan sobre el controlador, como Servicio, se distinguen por áreas de negocio.

Ejemplo o código fuente:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {

 @AliasFor(annotation = Component.class)
 String value() default "";

}

5. @ Autowired

Función y alcance: Puede marcar variables miembro de clase, métodos y constructores para completar el trabajo de ensamblaje automático. De hecho, es para obtener los objetos en el contenedor.

Precauciones:

Cuando use @Autowired, primero consulte el tipo de bean correspondiente en el contenedor

Si el resultado de la consulta es uno, el bean se ensambla con los datos especificados por @Autowired

Si hay más de un resultado de la consulta, @Autowired buscará por nombre.

Si el resultado de la consulta está vacío, se lanzará una excepción. Al resolver, use required = false

Ejemplo o código fuente:

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {

 boolean required() default true;

}

6. @ Inyectar

Función y alcance: Es una especificación en JSR330 (Inyección de dependencia para Java), que debe importarse a javax.inject.Inject; para realizar la inyección, ensamblaje automático según el tipo, si necesita ensamblar por nombre, necesita para cooperar con @Named, que se puede usar en variables, métodos de establecimiento y constructores. rara vez lo uso

Ejemplo o código fuente:

@Inject
public Message(Header header, Content content)
{
    this.headr = header;
    this.content = content;
}
public class Messager
{
    @Inject
    private Message message;
}

7. @ Recurso

Función y alcance: Es la implementación de la especificación JSR250. También necesita importar javax.annotation para lograr la inyección. Se ensambla automáticamente en función del nombre. Generalmente, se especifica un atributo de nombre, que se puede usar en variables y setter métodos.

Ejemplo o código fuente:

@Target({TYPE, FIELD, METHOD})
@Retention(RUNTIME)
@Repeatable(Resources.class)
public @interface Resource {

    String name() default "";
  
    String lookup() default "";

    Class<?> type() default java.lang.Object.class;

    enum AuthenticationType {
     CONTAINER,
     APPLICATION
    }

    AuthenticationType authenticationType() default AuthenticationType.CONTAINER;

    boolean shareable() default true;

    String mappedName() default "";

    String description() default "";
}

8. @ Configuración

Función y alcance: desde Spring 3.0, @Configuration se usa para definir clases de configuración y puede reemplazar archivos de configuración xml. La clase anotada contiene uno o más métodos anotados por @Bean, así como el componente de anotación más primitivo en AliasFor

Ejemplo o código fuente:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {

 @AliasFor(annotation = Component.class)
 String value() default "";

 boolean proxyBeanMethods() default true;

}

9. @ Bean

Función y alcance: actuar sobre el método para generar un objeto, y luego este objeto se entrega a Spring para su administración. Durante el proceso de inicialización, solo se generará y llamará una vez. Si el contenedor administra uno o más beans, estos beans debe estar en Configuración Crear bajo anotaciones El uso de anotaciones Bean en un método indica que este método debe ser entregado a Spring para su administración.

Ejemplo o código fuente:

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {

 @AliasFor("name")
 String[] value() default {};

 @AliasFor("value")
 String[] name() default {};

 Autowire autowire() default Autowire.NO;

 String initMethod() default "";

 String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;

}

10. @ ComponentScan

Función y alcance: escanear todos los objetos de la clase actual. ¿Por qué Component es lo más básico? Es escanear esta anotación. Está diseñado de forma muy inteligente y puede escanear varios paquetes.

Ejemplo o código fuente:

@ComponentScan(“com.abc.aaa”)
@SpringBootApplication
public class SpringbootApplication {
@ComponentScan({"com.abc.bbb","com.abc.aaa"})
@SpringBootApplication
public class SpringbootApplication {

11. @ WishlyConfiguration

Función y alcance: esta es una anotación combinada de Configuration y ComponentScan, que puede reemplazar estas dos anotaciones, y actualmente se usa muy raramente.

Ejemplo o código fuente: nunca usado

12. @ Aspecto

Función y alcance: las anotaciones de sección, que se utilizan a menudo en la programación de secciones, se pueden utilizar como un registro

Ejemplo o código fuente:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Aspect {

    public String value() default "";
}

13. @ Después

Función y alcance: configure Aspect para el uso de aspectos y ejecútelo después de la ejecución del método (en el método)

Ejemplo o código fuente:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface After {

    String value();
    
    String argNames() default "";
}

14. @ Antes

Función y alcance: configure Aspect para el uso de aspectos y ejecútelo antes de la ejecución del método (en el método)

Ejemplo o código fuente:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Before {

    String value();
    
    String argNames() default "";

}

15. @ Alrededor

Función y alcance: configurar Aspect para el uso de aspectos, ejecutar antes y después de la ejecución del método (en el método)

Ejemplo o código fuente:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Around {

    String value();
    
    String argNames() default "";

}

16. @ PointCut

Función y alcance: configurar el aspecto para el uso del aspecto, declarar el punto de corte

Ejemplo o código fuente:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Pointcut {
  
    String value() default "";
    
    String argNames() default "";
}

17. @ Alcance

Rol y alcance: Singleton (singleton, solo hay una instancia de bean en un contenedor Spring, el modo predeterminado),

Protetype (crea un nuevo bean para cada llamada),

Solicitud (en el proyecto web, cree un bean para cada solicitud http),

Sesión (en el proyecto web, cree un bean para cada sesión http),

GlobalSession (cree una instancia de Bean para cada sesión http global)

Ejemplo o código fuente:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Scope {

 @AliasFor("scopeName")
 String value() default "";

 @AliasFor("value")
 String scopeName() default "";

 ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT;

}

18. @ Valor

Función y alcance: inyecte dinámicamente valores externos en el Bean, los casos de uso son los siguientes:

  • Inyectar cuerdas ordinarias

  • Inyectar propiedades del sistema operativo

  • Inyectar resultado de expresión

  • Inyectar otras propiedades del bean: inyectar las propiedades del objeto beanInject otro

  • Inyectar recursos de archivos

  • Inyectar recursos de URL

Ejemplo o código fuente:

   @Value("normal")
    private String normal; // 注入普通字符串

    @Value("#{systemProperties['os.name']}")
    private String systemPropertiesName; // 注入操作系统属性

    @Value("#{ T(java.lang.Math).random() * 100.0 }")
    private double randomNumber; //注入表达式结果

    @Value("#{beanInject.another}")
    private String fromAnotherBean; // 注入其他Bean属性:注入beanInject对象的属性another,类具体定义见下面

    @Value("classpath:com/hry/spring/configinject/config.txt")
    private Resource resourceFile; // 注入文件资源

    @Value("http://www.baidu.com")
    private Resource testUrl; // 注入URL资源

19. @ PropertySource

Función y alcance: cargar el archivo de configuración especificado

Ejemplo o código fuente:

@PropertySource(value = {"classpath:test.properties"})
@Component
@ConfigurationProperties(prefix = "test")
public class Test {
    private Integer id;
    private String lastName;
}

20. @ Perfil

Función y alcance: cargar objetos bean de acuerdo con diferentes entornos

Ejemplo o código fuente:

@PropertySource("classpath:/user.properties")
@Configuration
public class MainConfigOfProfile implements EmbeddedValueResolverAware{
 
 @Profile("test")
 @Bean("testUser")
 public User testUser()  {
  User a =new User();
    return a;
 }
 
 @Profile("dev")
 @Bean("devUser")
 public User devUser()  {
  User a =new User();
    return a;
 }
 
}

21. @ Condicional

Función y alcance: Es una nueva anotación proporcionada por Spring4, su función es juzgar según ciertas condiciones y registrar beans en el contenedor cuando se cumplen las condiciones.

Ejemplo o código fuente:

@Configuration
public class BeanConfig {
 
    //只有一个类时,大括号可以省略
    //如果WindowsCondition的实现方法返回true,则注入这个bean    
    @Conditional({WindowsCondition.class})
    @Bean(name = "bill")
    public Window window(){
        return new Window();
    }
 
    //如果LinuxCondition的实现方法返回true,则注入这个bean
    @Conditional({LinuxCondition.class})
    @Bean("linux")
    public Linex linux(){
        return new Linex();
    }
}

22. @ EnableAsync

Función y alcance: iniciar de forma asincrónica, utilizar junto con Async

Ejemplo o código fuente:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(AsyncConfigurationSelector.class)
public @interface EnableAsync {

 Class<? extends Annotation> annotation() default Annotation.class;

 boolean proxyTargetClass() default false;

 AdviceMode mode() default AdviceMode.PROXY;

 int order() default Ordered.LOWEST_PRECEDENCE;

}

23. @ Async

Función y alcance: anotación asincrónica, debe usarse junto con EnableAsync, después de su uso, el método se convierte en un método asincrónico

Ejemplo o código fuente:

@Component
public class TreadTasks {
    @Async
    public void startMyTreadTask() {
        System.out.println("this is my async task");
    }
}

24. @ EnableScheduling

Función y alcance: escáner de anotación de tareas cronometradas, que escaneará todas las tareas cronometradas debajo del cuerpo del paquete

Ejemplo o código fuente:

@SpringBootApplication
@EnableScheduling //开启定时任务
public class MainApplication {

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

25. @ Programado

Función y alcance: controlador de tareas de temporización

Ejemplo o código fuente:

@Scheduled(cron = "0 0 2 * * ?") 

26. @ EnableJpaRepositories

Rol y alcance: soporte abierto para SpringData JPA Repository

Ejemplo o código fuente:

@EnableJpaRepositories({"com.cshtong.sample.repository", "com.cshtong.tower.repository"})

27. @ EnableTransactionManagement

Rol y alcance: abrir el soporte de transacciones anotadas

Ejemplos o código fuente: las cosas más comunes, no explicadas

@EnableTransactionManagement // 启注解事务管理
@SpringBootApplication
public class ProfiledemoApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(ProfiledemoApplication.class, args);
    }

28. @ EnableCaching

Función y alcance: habilite la compatibilidad con el almacenamiento en caché de estilo de anotaciones

Ejemplo o código fuente:

@Configuration
@EnableCaching
public class CachingConfig {

    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("sampleCache")));
        return cacheManager;
    }
}

29. @ Cacheable

Función y alcance: almacenar información

Ejemplo o código fuente:

@Cacheable(value = { "sampleCache","sampleCache2" },key="targetClass.getName()+'.'+methodName+'.'+#id")
    public String getUser(int id) {
        if (id == 1) {
            return "1";
        } else {
            return "2";
        }
    }

30. @ RequestMapping

Rol y alcance: anotaciones para asignar la URL de la solicitud a toda la clase o un método específico

Ejemplo o código fuente:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {

 String name() default "";

 @AliasFor("path")
 String[] value() default {};

 @AliasFor("value")
 String[] path() default {};

 RequestMethod[] method() default {};

 String[] params() default {};

 String[] headers() default {};

 String[] consumes() default {};

 String[] produces() default {};

}

31. @ ResponseBody

Función y alcance: después de que el objeto devuelto por el método del controlador se convierte al formato especificado a través de un convertidor apropiado, se escribe en el área del cuerpo del objeto de respuesta, que generalmente se usa para devolver datos JSON o datos XML.

Ejemplo o código fuente:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResponseBody {

}

32. @ RequestBody

Función y alcance: se utiliza para recibir los datos en la cadena json pasada por el front-end al back-end (datos en el cuerpo de la solicitud)

Ejemplo o código fuente:

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestBody {

 /**
  * 默认是必须的
  */
 boolean required() default true;

}

33. @ PathVariable

Función y alcance: recibir el valor del marcador de posición en la ruta de solicitud

Ejemplo o código fuente:

@RequestMapping(value=”user/{id}/{name}”)
请求路径:http://localhost:8080/user//1/james

34. @ RestController

Función y alcance: equivalente a @Controller + @ResponseBody

Ejemplo o código fuente:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {

 @AliasFor(annotation = Controller.class)
 String value() default "";

}

35.@ControllerAdvice

Función y alcance: manejo de excepciones globales; enlace de datos globales; preprocesamiento de datos globales

Ejemplo o código fuente:

@ControllerAdvice
public class MyGlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ModelAndView customException(Exception e) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("message", e.getMessage());
        mv.setViewName("error");
        return mv;
    }
}

@ControllerAdvice
public class MyGlobalExceptionHandler {
    @ModelAttribute(name = "md")
    public Map<String,Object> mydata() {
        HashMap<String, Object> map = new HashMap<>();
        map.put("gender", "女");
        return map;
    }
}

36. @ ExceptionHandler

Rol y alcance: se usa para manejar excepciones en el nivel del controlador

Ejemplo o código fuente:

 @ExceptionHandler({RuntimeException.class})
    public ModelAndView fix(Exception ex){
        System.out.println("aaaa");
        return new ModelAndView("error",new ModelMap("ex",ex.getMessage()));
    }

Supongo que te gusta

Origin blog.csdn.net/qq_31905135/article/details/107908962
Recomendado
Clasificación