@Configuration:表示当前的类是一个配置类,作用类似于 applicationContext.xml。
@Bean:将当前方法的返回值注册到 Spring 容器中,作用类似于配置文件里面的 Bean 标签。
@Resource(name=“xx”):按照名字去查找 bean
@Scope:设置单例还是多例。
@Component:与 @Configuration 作用相反,虽然都是注册到 Spring 容器中,但是这个注解注册的容器不是单例;意思是每次取出的对象都不是同一个。@Configuration 有一个拦截功能,每次调用当前方法前,会先去 Spring 容器中找是否有对应的 Bean,如果有,直接从容器中拿来使用,没有才会执行。
@Conditional:表示条件注解。当该注解的参数返回 true 的时候,当前配置就生效,否则不生效。写好以后,还需要新开一个类,实现 Condition 接口,重写的 mathces 方法,就是具体的条件判断方法。
@Profile:这个注解可以指定当前 bean 生效的环境,底层就是条件注解。通过ctx.getEnvironment().setActiveProfiles(“xxx”) 来设置当前环境。
@Repository:一般加在 dao 层。
@Service:一般加在 service 层。
@Controller:一般加在 servlet / Controller 层。标记当前类是一个处理器。
@Component:一般加在那些没有明确身份的,不属于上面三个层的。
@ComponentScan:表示组件扫描,默认会扫描所有的 @Repository、@Service、@Controller和@Component。其中,这个注解可以加 basePackages 属性:如果不指定,则默认扫描的是当前配置类下面所在的包的所有类;如果加了这个属性,则当前包,以及当前包下的子包,都会扫描。里面还有其他属性:
useDefaultFilters:为true时,扫描所有包,为false时,一个包都不扫描。
includeFilters(xxx):只扫描某个包。
excludeFilters(xxx):不扫描某个包。
@Autowired:自动装填。表示跟 Spring 容器去要一个 xxx,这个是根据类型查找 xxx。
@Resources:功能跟 @Autowired 一样,不过是根据名称去查找 xxx。
@Aspect:表示当前类是一个切面
@EnableAspectJAutoProxy:开启自动代理
@Before(“execution(* com.xx.xx.xx.Class.*(…))”):前置通知(execution 是切点的定义),同理还有后置通知。
@AfterReturning(value=“execution(* com.xx.xx.xx.Class.*(…))”,returning=“返回值xx”):返回通知
@AfterThrowing(value=“execution(* com.xx.xx.xx.Class.*(…))”,throwing=“异常xx”):异常通知
@Around(value=“execution(* com.xx.xx.xx.Class.*(…))”):环绕通知
@Pointcut(value=“execution(* com.xx.xx.xx.Class.*(…))”):定义切点,定义好以后可以被其他通知引用,类似于配置文件的 ref。
@PropertySource(classpath: xx.properties):加载一个 properties 配置文件,这个注解的作用类似于配置文件中的 context:property-placeholder。
@Value("${ xx.xxxx }"):从Spring 容器中取回 peroperties 配置文件中对应的值,返回赋予给某个变量。用在变量上面
@Transactional:开启事务,凡是加了这个注解的方法,都有事务。这个注解可以放在方法上也可以放在类上,放在类上表示这个类下所有的方法都有事务。使用在方法上时,只能应用到 public 方法上,否则不生效。使用在类上时,对该类下的所有 public 方法生效。该注解有常用的五个参数。
@EnableTransactionManagement:开启事务注解。用在类上面;这个注解相当于配置文件的
@RestController:这个注解是 @ResponseBody 和 @Controller 注解的组合注解。意思是既是接口层,又不需把返回值当作视图处理,直接是什么数据就返回什么数据。
@RequestMapping("/xxx"):如果加在方法上面,意思是标记当前方法是一个接口,里面的参数就是请求的URL地址。由于Controller 间的地址名不能重复,所以该注解加在类上面时,意思是统一的给当前类下面的所有方法的访问路径增加一个前缀xxx。
@RequestMapping(value="/xx",method={RequestMethod.GET}):里面的 method 是限定请求方法为 get 方法,value 是路径。
@GetMapping("/xxx"):上面的简化写法,限定请求方法为 get 方法,路径是xxx。
@GetMapping(value="/xxx",produces=“test/html;charset=utf-8”):直接返回字符串时,如果是中文的情况下有可能乱码,加 produces 这个属性解决这个问题。value 是路径。
除了 get 还有 PostMapping、PulMapping、DelMapping。
@RequestParam(value=“xx”,defaultValue=“xx”,required=false):用来指定接收前端传过来的参数的别名、默认值(也就是前端没有传值的时候用的就是这个默认值)、是否必填。比如前端传的参数跟实体类的属性名并没有一 一对应的时候就可以用这个方法。凡是加了这个注解的参数,必须不能为null,不然会报错,一般是400错误,叫参数转换异常;这种错误还太好排查。用在接口方法的形参中。例子:
@PathVariable(“xx”):可以用来指定参数的别名,比如参数跟实体类的属性名没有对应,可以使用这种方法。
@PathVariable 和 @RequestMapping 的搭配使用:@RequestMapping(“/xx/{yy}”)路径中参数yy就会传给 @PathVariable 中的变量名,一般要求这两者一致,如果不一致,就需要参数 yy 跟别名一致。即使变量名和路径中的参数名一致,也要写@PathVariable。例子:
@ResponseBody:表示该方法的返回值就是请求的相应内容,不对返回值进行二次处理。一般返回字符串,框架会自动帮我们渲染,返回的是 xx.jsp / html 这个页面,如果只想返回字符串,但不希望框架帮我们渲染导致跳转页面,那么就加这个注解。如果加在类上面,表示该类下的所有方法的返回值都不会进行二次处理。如果是json格式,返回一个对象这种,也需要加这个注解,这个注解会自动的把返回的对象转换为json。
@JsonFormat(pattern=“时间格式”):日期属性格式化。返回给前端的 json 格式中如果有时间 / 日期,格式可能会不对;通过该注解进行时间格式化。(加在实体类的属性上面)
@JsonProperty:(“xx”):修改生成后的 json 格式显示的属性名。(加在实体类的属性上面)。例子:
@RequestBody:把传进来的json格式自动转换为 xx 对象。(加在方法的上面)
@SessionAttributes({“xx”,“xx”}):该注解放到类上面时,将来把属性存入到 model 或者 modelandview 的同时自动的把属性存入到 session 中。放到方法括号里面,参数的左边时,意味着把属性从 session 中取出来,放到参数中。(如果session中没有对应的属性,会报错。):
@ControllerAdvice:这是一个增强的处理器,其他处理器抛异常,都会进入到里面来。放在类上面。例子:
@ExceptionHandler(xx.class):指定该方法要处理的异常,只有指定的异常才会进到该方法里面来。例子:
@CrossOrigin(origins=“xxx”):设置当前接口允许跨域,即愿意接收来自 xxx 的请求。放在方法上跟类上面都行,放在类上面的意思就是当前类下面的所有方法都允许跨域。例子:
@EnableWebMvc:作用相当于配置文件的 < mvc:annotation-driven/ >,与继承 WebMvcConfigurationSupport 这个类效果一样,注解跟继承二选一即可,但如果是使用继承,后面可以方便重写方法来完成拦截器中的拦截规则的设置,注解则没那么方便。
@MapperJdbcTypes(JdbcType.VARCHAR):指定数据库一方的字段类型。
@MapperTypes(xx.class):指定java一方的数据类型。跟上面的配合使用,一般用在类型转换器中。
@Param:在 mapper 层使用,给传入的多个参数起别名(单个参数不需要该注解,多个参数就需要该注解,比如数组集合等;或者直接就是三四个零散的参数这种。map 类型不需要),这个别名与 sql 语句的字段名一致,起了别名后就能根据该别名得到参数值,将参数正确的传入 sql 语句中。
@RequiresRoles(value={“xx”,“xx”},logical=xx):访问当前方法必须具备某个角色(默认情况下是所有角色都必须具备;value 属性配置需要的角色);通过 logical 可以配置多个角色之间的关系,比如 logical.OR ,还有 logical.AND 等。
@RequiresPermissions(“xx”):访问当前方法必须具备某个权限(也可以是多个权限,多个权限写法跟上面一样)。xx 填什么都行,其实就是一个字符串(比如:“book : read”,人为自定义的认为这个字符串就是书籍类的读权限)。
@RequiresAuthentication:访问当前方法必须是通过用户名/密码登录之后,才能访问,不能是 rememberme 登录。
@RequiresUser:访问当前方法必须登录之后才能访问,无论是用户名 / 密码登录,还是 rememberme,这两者都行。
@RequiresGuest:必须是游客才能访问该方法。
@SpringBootApplication:说明当前类是一个配置类,类似于config的效果。起作用的重点在于该注解里面的@SpringBootConfiguration 注解。
@EnableAutoConfiguration:开启自动化配置(包括Spring、MVC、Redis等各种各样的东西)。
@ConfigurationProperties(prefix=“xx”):类型安全的属性注入,指定前缀要注入的对象名,就会自动去Spring 容器中查找相对应的属性进行注入;这样就不需要一个个写属性。这个注解方便,解决了很多繁琐的操作,对应的是Properties文件相关注解的@Value。例子:
简化后:
@ConditionalOnClass(xx.class):当有括号中这些类的时候,该注解标注的类 / 方法才会生效。用在类的上面。
@ConditionalOnMissingBean(xx.class):当缺少括号中的类的时候,该注解标注的类 / 方法才会生效。用在类的上面。
@ConditionalOnProperty():按照属性来判断当前类是否生效。
@Order(x):x 填的是数值。如果存在多个启动任务,可以通过 @Order 注解来为系统启动任务设置优先级,数值越小,优先级越高。用在类的上面。
@ConfigurationProperties(prefix=“xxx”):表示使用 xxx 前缀的配置文件创建数据源。例子:
@Qualfier(“xx”):当存在多个 DataSource 实例(数据源)的时候,通过该注解去指定名字。一般会跟 @Autowired 一起使用。例子:
@ServletComponentScan:扫描 web 基础组件,包括servlet / listener / filter。
@Mapper:表示当前接口是一个 mapper。用在 mapper 接口层的类上面。每个 mapper 上面都需要这个注解。(也可以通过批量扫描注解代替这个注解,这样就不需要每个 mapper 上面都添加这个注解)
@MapperScan(basePackages=“xxx”):批量扫描所有的 mapper;xxx 是 mapper 类的全路径。该注解加在 SpringBoot 启动类上面。
@EnableScheduling : 开启定时任务。加在 SpringBoot 启动类上面。
@Scheduled(fixedDelay=xx,fixedRate=xx,cron=“ * * * * * ?”):执行定时任务。fixedDelay 是指上一个定时任务执行完成后,多少秒之后开始下一次定时任务的执行;fixedRate 是指上一个定时任务开始多久后,开始下一次定时任务的执行。单位:毫秒。cron 是指 cron 表达式,这是一种通用的对定时任务的描述语言。该注解用在方法上面。
@EnableSwagger2:开启 Swagger2。加在 SpringBoot 启动类上面。
@ApiOperation(“这里描述接口”):该注解可以描述这个接口的实际作用。用在方法上面。
@Api(tags=“xxx”):该注解描述这个类的实际作用。tags 是一个 Spring 数组,可以描述多个实际作用。用在类上面。
@ApiImplicitParam(name=“xx”,value=“xxx”,defaultValue=“xxxx”,required=true):该注解描述单个参数的含义。name:参数名。value:用户名。defaultValue:默认值。required=true:该参数必填,配合@RequestParam 注解使用,因为该属性只是在 swagger2 的网站测试接口时必填而已。用在方法上面。
@ApiImplicitParams({x,x}):该注解描述多个参数的含义。里面放多个@ApiImplicitParam注解。用在方法上面。例子:
描述实体类对象、参数:
@ApiModel(“这里描述实体类”):描述实体类。用在实体类上面。
@ApiModelProperty(“这里描述实体类的属性”):描述实体类属性。放在属性的上面。例子:
@ApiResponse(code=状态码,message=“响应信息”):描述单个响应信息。
@ApiResponses({x,x}):描述多个响应信息。里面放多个@ApiResponse注解。例子:
@EnableCaching:开启 redis 缓存功能(在 SpringBoot 启动类上面配置)。
@Cacheable(cacheNames = “xx”,key = “#xx”,keyGenerator =“xxx”):该注解表示当前方法的返回值会被缓存到 redis 中。其中 xx 是缓存的名字,在properties 文件里面设置。这里 key = “#xx” 表示使用 xx 作为缓存的 key。keyGenerator 表示 key 的生成器,可以自定义 key 的格式。
@CachePut:表示数据更新完成后,将更新的结果缓存到redis中(放在方法上面使用)。如果缓存有指定 key,这里同样要指定一样的 key。确保缓存的 key 和查询时候缓存的 key 一致。方法的返回值会被重新存入 redis。
@CacheEvict(cacheNames=“xx”,beforeInvocation= false,allEntries = false):删除数据的时候,同时删除缓存;放在方法上面使用。beforeInvocation 表示是否在删除数据库之前删除缓存,true 表示先删除缓存,false 表示先删除数据库 中的数据,默认是 false。allEntries 表示是否删除所有实体,设置为 true 则表示会清空掉所有数据,默认是 false,;如果是 false,传 id=22 进来,则只删除 id 为 22的数据。
@CacheConfig(cacheNames = “xx”):公共配置;放在类上面使用。这么写该类下面的方法都不需要在指定缓存的名字,方法上就可以不用写 cacheNames。
@RabbitListener(queues = XXX . MY_QUEUE_NAME):表示监听的是 mq_queue_name 队列。
@GlobalTransactional:分布式事务。
@PostConstruct:当前类的构造方法执行完成后,会自动触发该方法,可以在该方法中,完成一些对象的初始化操作。
@Exchange(value = “exchangeName”, type = “direct”, durable = “true”, autoDelete = “false”, internal = “false”):配置交换机持久化。value:交换机名称。type:交换机类型,默认direct。durable:是否持久化,默认true。autoDelete:是否自动删除,默认false。internal:是否为内部交换机,默认为false。
@Queue(value = “queryName”, durable = “true”, exclusive = “false”, autoDelete = “false”):配置队列持久化。value:队列名称。durable:是否持久化。exclusive:是否为独占队列。autoDelete:是否自动删除。
@SpringEurekaServer:开启 eureka 服务端。
@SpringEurekaClient:标记当前项目是一个 eureka 客户端。
@LoadBalanced:开启负载均衡。通常用在 RestTemplate 方法上面,此时 RestTemplate 在启动类里面(这里是提醒这个注解用的时候 RestTemplate 在什么地方,且此时该方法被 @Bean 标记)。
@SpringCloudApplication:组合注解。效果相当于 @SpringBootApplication + @EnableEurekaClient + @EnableCircuitBreaker 这三个注解组合。(实际组合了多少个注解可自行查看注解的源码)
@SpringFeignClient:开启 Feign 的客户端。
@FeignClient(value=“xxx”,fallback=“xxx.class”):表示这个 Feign 客户端绑定了当前的微服务;value=“xxx”是服务名,fallback=“xxx.calss”表示处理服务降级的类。一般用在 service 层的类上面,此时 service 层是接口类。
@EnableCircuitBreaker:开启断路器。
@HystrixCommand(fallbackMethod=“xx”,ignoreExceptions=xxx.class):服务降级。指定当前方法的断路器,即当前方法如果执行失败,抛出异常,会触发 fallbackMethod 中指定的 xx 方法。ignoreExceptions=xxx.class 表示忽略 xxx 异常,即当抛出 xxx 异常的时候,不进行服务降级,直接将异常抛出。
@CacheResult:启用缓存。
@CacheKey:可以指定缓存的 key。
@CacheRemove:表示移除缓存中的数据。
@EnableZuulProxy:开启 zuul 的代理功能。在启动类上面使用。
@EnableConfigServer:开启 config 服务端。
@RefreshScope:实现配置、实例热加载;放在类上面使用。spring cloud 提供的一种特殊的scope实现。加了这个注解,涉及到容器中注入进来的所有数据;如果容器刷新,那么这些数据都会刷新一遍。
@EnableBinding(xxx.class):绑定一个通道。官方提供了一个叫 Sink ,预定义的消息通道。这个消息通道也可以自己定义。
@Input(“通道名”):定义输入通道。用在方法上。一般用在自定义消息通道中,此时这个通道是一个接口类。
@Output(“通道名”):定义输出通道。用在方法上。一般用在自定义消息通道中,此时这个通道是一个接口类。
@StreamListener(xxx类.通道名):监听一个输入/输出通道。