- 功能型注解Enable*开启对XX的支持
@EnableAspectJAutoProxy:开启对AspectJ自动代理的支持
@EnableTransactionManagement:开启注解式事务的支持
@EnableCaching:开启注解式的缓存支持
@EnableAsync:开启异步方法的支持
@EnableScheduling:开启计划任务的支持
@EnableWebMvc:开启Web MVC的配置支持
@EnableJpaRepositories:开启对SpringData JPA Repository的支持
@EnableFeignClients:启用feign客户端(Spring Cloud)
- 给容器中注入组件
@Component:泛指各种组件,通用注解
@Controller、 @Service、 @Repository都可以称为@Component
@Controller:是 Spring-MVC 的注解,具有请求、转发及重定向的功能
@Service:该注解只是标记该类处于业务逻辑层
@Repostory:主要作用于持久层,能将数据库操作抛出的原生异常转换为 spring 持久层异常
@Import:用来导入配置类或者一些需要前置加载的类
@ImportSelector:返回需要导入的组件的全类名数组
@ImportBeanDefinitionRegistrar:手动注册bean到容器中
- Java配置类相关注解
@PropertySource:用于引入其他的 properties 配置文件
@Configuration:声明当前类为配置类,配置bean单例池
@Bean:注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式
@DependsOn:该注解可以配置Spring IoC容器在初始化一个Bean之前,先初始化其他的Bean对象
@PostConstruct:初始化方法,由JSR-250提供,在构造函数执行完之后执行,等价于xml配置文件中bean的initMethod
@PreDestory:销毁方法,由JSR-250提供,在Bean销毁之前执行,等价于xml配置文件中bean的destroyMethod
@ComponentScan:扫描指定包下的所有Spring Bean组件。
- 环境切换
@Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件
@Conditional:通过实现Condition接口,并重写matches方法,从而决定该bean是否被实例化
- @Bean的属性支持
@Scope:设置Spring容器如何新建Bean实例,比如@Scope(value = "prototype")
其设置类型包括:
Singleton:单例,一个Spring容器中只有一个bean实例,默认模式
Protetype:每次调用新建一个bean
Request:web项目中,给每个http request新建一个bean
Session:web项目中,给每个http session新建一个bean
GlobalSession:给每一个 global http session新建一个Bean实例
- 切面(AOP)相关注解
@Aspect:声明一个切面
@After:在方法执行之后执行(方法上)
@Before:在方法执行之前执行(方法上)
@Around:在方法执行之前与之后执行(方法上)
@PointCut:声明切点:
- execution():用于匹配方法执行的连接点
- args():用于匹配当前执行的方法传入的参数为指定类型的执行方法
- this():用于匹配当前AOP代理对象类型的执行方法,注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配
- target():用于匹配当前目标对象类型的执行方法,注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配
- within():用于匹配指定类型内的方法执行
- @args():用于匹配当前执行的方法传入的参数持有指定注解的执行
- @target():用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解
- @within():用于匹配所以持有指定注解类型内的方法
- @annotation:用于匹配当前执行方法持有指定注解的方法
AspectJ类型匹配的通配符:
- * 匹配任何数量字符;
- . . 匹配任何数量字符的重复,如在类型模式中匹配任何数量子包;而在方法参数模式中匹配任何数量参数。
- +匹配指定类型的子类型;仅能作为后缀放在类型模式后边。
- 异步相关
@EnableAsync:配置类中通过此注解开启对异步任务的支持
@Async:在实际执行的bean方法使用该注解来声明其是一个异步任务(方法上或类上所有的方法都将异步)
- 定时任务相关
@EnableScheduling:在配置类上使用,开启计划任务的支持(类上)
@Scheduled:来申明这是一个任务,包括cron,fixDelay,fixRate等类型
- 缓存相关
@Cacheable:用来标记缓存查询。可用于方法或者类中
@CacheEvict:用来标记要清空缓存的方法,当这个方法被调用后,即会清空缓存
- 测试相关
@RunWith:就是一个运行器@RunWith(JUnit4.class)就是指用JUnit4来运行
@SuppressWarnings:是J2SE提供的一个批注。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默
- 依赖注入
@Required:注入 bean 时,要求bean 不能为null,否则抛BeanInitializationException
@Value:注入普通字符、操作系统属性、表达式结果、其它bean属性、文件资源及配置文件
@Autowired:注入一个 bean。用来装配bean,都可以写在字段上,或者方法上
@Qualifier:当有多个相同类型的bean 冲突时,用来指定具体的bean 名称进行注入
@Primary: 优先级最高的,如果同时有@Primary以及其他几个的话,@Primary注解的Bean会优先加载
@Priority是JSR 250标准,同样是值越小优先级越高。但是两者还是有一定却别,@Priority能够控制组件的加载顺序,因此@Priority侧重于单个注入的优先级排序。此外@Priority优先级比@Order更高,两者共存时优先加载@Priority。
@Order:定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序,Bean的加载顺序不受@Order或Ordered接口的影响
- 异常处理
@ControllerAdvice: @Component注解的一个延伸注解,Spring会自动扫描并检测被@ControllerAdvice所标注的类。@ControllerAdvice需要和@ExceptionHandler、@InitBinder以及@ModelAttribute注解搭配使用,主要是用来处理控制器所抛出的异常信息。
@ExceptionHandler: 该注解用于标注处理特定类型异常类所抛出异常的方法。当控制器中的方法抛出异常时,Spring会自动捕获异常,并将捕获的异常信息传递给被@ExceptionHandler标注的方法。
@InitBinder:用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中
@ModelAttribute:如果把@ModelAttribute放在方法的注解上时,代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法。可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。比如权限的验证(也可以使用Interceptor)等,如果使用@ModelAttribute对方法进行标注,Spring会将方法的返回值绑定到具体的Model上
- 其它注解说明
@Transactional:配置事务
@Transient:如果一个属性并非数据库表的字段映射,就务必将其标示为@javax.persistence.Transient
@Lazy:表示延迟注入bean。
@EqualsAndHashCode:任意类的定义都可以添加@EqualsAndHashCode注解,让lombok帮你生成equals(Object other)和hashCode()方法的实现。默认情况下会使用非静态和非transient型字段来生成
@JsonIgnore:在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响
@JsonFormat:此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式
@ContextConfiguration:用Spring整合JUnit4测试时,使用注解引入多个配置文件
比如:
@ContextConfiguration(Locations=”classpath:applicationContext.xml”)
@ContextConfiguration(classes = SimpleConfiguration.class)
- SpringMVC常用注解
@RestController:该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody
@RequestMapping:用于映射web请求,包括访问路径和参数
@RequestBody:允许request的参数在request体中,而不是在直接连接的地址后面
@ResponseBody: 该注解只能用在被@Controller注解标记的类中。如果在被@RestController标记的类中,则方法不需要使用@ResponseBody注解进行标注。
@RequestParam: 注解用于将方法的参数与Web请求的传递的参数进行绑定。使用@RequestParam可以轻松的访问HTTP请求参数的值
@PathVariable:该注解是将方法中的参数绑定到请求URI中的模板变量上。可以通过@RequestMapping注解来指定URI的模板变量,然后使用@PathVariable注解将方法中的参数绑定到模板变量上,模板变量名需要使用{ }进行包裹,如果方法的参数名与URI模板变量名一致,则在@PathVariable中就可以省略别名的定义
- Spring Boot注解
Spring Boot功能型注解
@SpringBootApplication:该注解是一个快捷的配置注解,自动触发自动配置Bean和自动扫描组件。该注解包含@SpringBootConfiguration(@Configuration)、@EnableAutoConfiguration及@ComponentScan。
@EnableAutoConfiguration:开启Spring Boot自动配置装配,到classpath下的读取META-INF/spring.factories文件的配置并返回一个字符串数组。在启动过程中会解析对应类配置信息,将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration key对应的配置项加载到spring容器
只有spring.boot.enableautoconfiguration为true(默认为true)的时候,才启用自动配置。
其内部实现的关键点有:
1、ImportSelector 该接口的方法的返回值都会被纳入到spring容器管理中
2、SpringFactoriesLoader 该类可以从classpath中搜索所有META-INF/spring.factories配置文件,并读取配置
@EnableConfigurationProperties:注解在类上,声明开启属性注入,使用@Autowired注入。例:@EnableConfigurationProperties(HttpEncodingProperties.class)。
@AutoConfigureAfter:在指定的自动配置类之后再配置。例:@AutoConfigureAfter(WebMvcAutoConfiguration.class)。
@ConfigurationProperties:将properties属性与一个Bean及其属性相关联,从而实现类型安全的配置。
条件注解
@Conditional:该注解可以控制更为复杂的配置条件。在Spring内置的条件控制注解不满足应用需求的时候,可以使用此注解定义自定义的控制条件,以达到自定义的要求。
@ConditionalOnBean:当容器里有指定Bean的条件下。
@ConditionalOnClass:当类路径下有指定的类的条件下。
@ConditionalOnExpression:基于SpEL表达式作为判断条件。
@ConditionalOnJava:基于JVM版本作为判断条件。
@ConditionalOnJndi:在JNDI存在的条件下查找指定的位置。
@ConditionalOnMissingBean:当容器里没有指定Bean的情况下。
@ConditionalOnMissingClass:当类路径下没有指定的类的情况下。
@ConditionalOnNotWebApplication:当前项目不是web项目的条件下。
@ConditionalOnResource:类路径是否有指定的值。
@ConditionalOnSingleCandidate:当指定Bean在容器中只有一个,后者虽然有多个但是指定首选的Bean。
@ConditionalOnWebApplication:当前项目是web项目的情况下。
@ConditionalOnProperty:注解会根据Spring配置文件中的配置项是否满足配置要求,从而决定是否要执行被其标注的方法。
@ConditionalOnResource:此注解用于检测当某个配置文件存在使,则触发被其标注的方法。
@ConditionalExpression:此注解可以让我们控制更细粒度的基于表达式的配置条件限制。当表达式满足某个条件或者表达式为真的时候,将会执行被此注解标注的方法。