SpringBoot--注解
@Configuration:用于定义配置类,可替换XML配置文件,被注解的类内部包含一个或多个@Bean注解方法。-
@Configuation等价于<Beans></Beans> @Bean 等价于<Bean></Bean> @ComponentScan等价于<context:component-scan base-package="com.dxz.demo"/> @Component 等价于<Bean></Bean>
-
-
@Service
- @Controller
- @Respority
- @Component
- @ResponseBody
- 接受参数的常用注解:
- 普通的参数:@RequestParam
-
路径参数:@PathVariable
-
接受json格式的参数:@RequestBody
-
* @PathVariable(路径变量)
* @RequestHeader(获取请求头)
* @RequestParam(获取请求参数)
* @CookieValue(获取Cookie值)
* @RequestAttribute(获取request域的属性)
* @RequestBody(获取请求体[POST])
* @MatrixVariable(矩阵变量)
-
@EnableConfigurationProperties注解的作用是:使使用 @ConfigurationProperties 注解的类生效。
说明:
如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component,那么在IOC容器中是获取不到properties 配置文件转化的bean。说白了 @EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了一次注入。
测试发现 @ConfigurationProperties 与 @EnableConfigurationProperties 关系特别大。 -
@ConfigurationProperties 和 @value 有着相同的功能,但是 @ConfigurationProperties的写法更为方便
@ConfigurationProperties 的 POJO类的命名比较严格,因为它必须和prefix的后缀名要一致, 不然值会绑定不上, 特殊的后缀名是“driver-class-name”这种带横杠的情况,在POJO里面的命名规则是 下划线转驼峰 就可以绑定成功,所以就是 “driverClassName”
@importResource(value="xxx.xml") :引入xml的配置文件
1.全局异常处理的注解:@controllerAdive
@ControllerAdvice ,很多初学者可能都没有听说过这个注解,实际上,这是一个非常有用的注解,顾名思义,这是一个增强的 Controller。使用这个 Controller ,可以实现三个方面的功能:- 全局异常处理
- 全局数据绑定
- 全局数据预处理
2.Spring注解之@validated的使用 spring-boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。 比如,我们判断一个输入参数是否合法,可以用如下方式
1 首先在controller上声明需要对数据进行校验
@RequestMapping(value="/url.json",method= {RequestMethod.POST}) @ResponseBody @Transactional public Result<?> xxmethod( @RequestBody @Validated XoPO xoPo) throws ParseException, UnsupportedEncodingException {}2 然后在bean上声明需要被校验的字段
@data public class XoPO{ @validated private List<OrderPerson> personList; @NotNull @Size(max=32,message="code is null") private String code; @NotBlank @Size(max=32,message="product is null") private String product; }3.@Accessors(chain = true) 这个注解是来至于lombok里面的 只需要在实体类加上就可以开启链式编程了
链式访问,该注解设置chain=true,生成setter方法返回this(也就是返回的是对象),代替了默认的返回void。4.下面重点介绍@ApiModel @ApiModel这个注解是比较重要的一个注解。因为在实际的开发过程中,我们知道了请求的地址后,我们更加重要的是关心这个接口的请求入参和返回值。 而对于@ApiModel这个注解,可以良好的展示出请求参数的含义和返回参数的含义。自定义注解:
应用场景二:自定义注解+AOP 实现日志打印
先导入切面需要的依赖包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>定义一个注解@MyLog
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MyLog { }定义一个切面类,见如下代码注释理解:
@Aspect // 1.表明这是一个切面类 @Component public class MyLogAspect { // 2. PointCut表示这是一个切点,@annotation表示这个切点切到一个注解上,后面带该注解的全类名 // 切面最主要的就是切点,所有的故事都围绕切点发生 // logPointCut()代表切点名称 @Pointcut("@annotation(me.zebin.demo.annotationdemo.aoplog.MyLog)") public void logPointCut(){}; // 3. 环绕通知 @Around("logPointCut()") public void logAround(ProceedingJoinPoint joinPoint){ // 获取方法名称 String methodName = joinPoint.getSignature().getName(); // 获取入参 Object[] param = joinPoint.getArgs(); StringBuilder sb = new StringBuilder(); for(Object o : param){ sb.append(o + "; "); } System.out.println("进入[" + methodName + "]方法,参数为:" + sb.toString()); // 继续执行方法 try { joinPoint.proceed(); } catch (Throwable throwable) { throwable.printStackTrace(); } System.out.println(methodName + "方法执行结束"); } }在步骤二中的IndexController写一个sourceC进行测试,加上我们的自定义注解:
@MyLog @GetMapping("/sourceC/{source_name}") public String sourceC(@PathVariable("source_name") String sourceName){ return "你正在访问sourceC资源"; }


浙公网安备 33010602011771号