发现尚硅谷在羽雀上有个笔记,整理了SpringBoot2的很多注解,大家可以看尚硅谷的,很详细。
后面为自己整理的。
@Value
@Value的值有两类:
${ property : default_value }
#{ obj.property? :default_value }
第一个注入的是外部配置文件对应的property,第二个则是SpEL表达式对应的内容。 那个
default_value,就是前面的值为空时的默认值。注意二者的不同,#{}里面那个obj代表对象。
@Configuration
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
@ConfigurationProperties 配置绑定。
1 @Component + @ConfigurationProperties
@Component
// 把配置文件,如application.yaml文件中的前缀为”mycar“的封装到这个类
@ConfigurationProperties(prefix = "mycar")
@Data
public class AccountClass {
private String base;
}
使用Java读取到properties文件中的内容,并且把它封装到JavaBean中,以供随时使用。
/** * 只有在容器中的组件,才会拥有SpringBoot提供的强大功能 */
@Component 把普通pojo实例化到spring容器中,相当于配置文件中的
<bean id="" class=""/>
2 @EnableConfigurationProperties + @ConfigurationProperties(类上不用@Component)
但是要在用这个类的那个文件里加上
@EnableConfigurationProperties(AccountClass.class)
@SpringBootApplication 等同于下面三个注解的组合
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication{}
1 @SpringBootConfiguration
@Configuration。代表当前是一个配置类
2 @ComponentScan
指定扫描哪些,Spring注解;
3 @EnableAutoConfiguration
@RequestAttribute
@RequestAttribute注解的参数在项目里是自己解析出来的,并不是前端传递的。具体一点,在项目里的拦截器里会对Token信息进行解析,解析出来的参数重新放在请求里(用httpServletRequest.setAttribute(name, value)),后边接口接收参数时就用这个注解。
@RequestParam注解则表示这个参数是通过前端传递过来的,如果请求里没有这个参数,则会报错400 Bad Request。这个注解用来解析请求路径里的参数(get请求)或者post请求中form表单格式的请求参数;
2、返回值解析器原理
- 1、返回值处理器判断是否支持这种类型返回值 supportsReturnType
- 2、返回值处理器调用 handleReturnValue 进行处理
- 3、RequestResponseBodyMethodProcessor 可以处理返回值标了@ResponseBody 注解的。
-
- 1. 利用 MessageConverters 进行处理 将数据写为json
-
-
- 1、内容协商(浏览器默认会以请求头的方式告诉服务器他能接受什么样的内容类型)
- 2、服务器最终根据自己自身的能力,决定服务器能生产出什么样内容类型的数据,
-
-
-
- 3、SpringMVC会挨个遍历所有容器底层的 HttpMessageConverter ,看谁能处理?
-
-
-
-
- 1、得到MappingJackson2HttpMessageConverter可以将对象写为json
- 2、利用MappingJackson2HttpMessageConverter将对象转为json再写出去。
-
-
@ExceptionHandle
@ControllerAdvice
@Slf4j
public class CommonControllerException {
@ExceptionHandler(value = {Exception.class, RuntimeException.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public BusinessResponse<Void> defaultErrorHandler(HttpServletRequest req, Exception e) {
BusinessResponse<Void> businessResponse;
if (e instanceof MegrezException) {
businessResponse = ResponseUtil.buildErrorResponse((MegrezException) e);
} else {
businessResponse = BusinessResponse.build(ResponseCode.SYSTEM_ERROR);
log.error("system error", e);
}
return businessResponse;
}
}
1 给方法加上@ExceptionHandler注解,这个方法就会处理类中其他方法(被@RequestMapping注解)抛出的异常。
2 @ExceptionHandler注解中可以添加参数,参数是某个异常类的class,代表这个方法专门处理该类异常,上面这个就是处理 Exception, RuntimeException类的异常,表示只有方法抛出这两种异常时,才会调用该方法。
3 就近原则
4 注解方法的返回值。添加@ResponseBody注解后,可以直接返回字符串。
5 使用@ExceptionHandler时尽量不要使用相同的注解参数。
@EnableWebMVC会导致WebMvcAutoConfiguration失效
让id自增,*Mapper.xml文件中
<insert id="insert" parameterType="AreaInfo" useGeneratedKeys="true" keyProperty="id">
注解方式中
@Options(useGeneratedKeys = true)
int insert(Certify newCertify);
@TableField(exist=false)
数据库表中不存在,但是前端表中可能需要
@Order注解主要用来控制配置类的加载顺序
@Order(value = Ordered.HIGHEST_PRECEDENCE) 最高优先级
断言
1 断言失败,后续的不会执行。
2 组合断言
@FunctionalInterface——这个接口是函数式接口,只有一个抽象方法
@ Repository是Spring的注解,表示这个类对对象有CURD的功能,而@Mapper是Mybatis的注解。
@Resource是JDK的注解,而@Autowired是Spring的注解
追加