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()));
}