转载自:https://baijiahao.baidu.com/s?id=1770111233742955906&wfr=spider&for=pc
一、spring中常见注解
1、@Autowired
spring中@Autowired 是一个注释,它可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。
2、@RequestParam、@RequestBody
@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性。@RequestParam也可用于其它类型的请求,例如:POST、DELETE等请求。
注解@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据。
二、SpringBoot 中常用注解
1、@Controller和@RestController区别
1)如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
2)如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
3)如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
@Controller必须配合模版来使用。spring-boot 支持多种模版引擎包括:
1,FreeMarker
2,Groovy
3,Thymeleaf (Spring 官网使用这个)
4,Velocity
5,JSP (貌似Spring Boot官方不推荐,STS创建的项目会在src/main/resources 下有个templates 目录,这里就是让我们放模版文件的,然后并没有生成诸如 SpringMVC 中的webapp目录)
2、@RequestMapping与@GetMapping和@PostMapping等新注释
Spring的复杂性不是来自于它处理的对象,而是来自于自身,不断演进发展的Spring会带来时间维度上复杂性,比如SpringMVC以前版本的@RequestMapping,到了新版本被下面新注释替代,相当于增加的选项:
-
@GetMapping 用于处理请求方法的GET类型
-
@PostMapping 用于处理请求方法的POST类型
-
@PutMapping
-
@DeleteMapping
-
@PatchMapping
从命名约定我们可以看到每个注释都是为了处理各自的传入请求方法类型,如果我们想使用传统的@RequestMapping注释实现URL处理程序,那么它应该是这样的:@RequestMapping(value = “/get/{id}”, method = RequestMethod.GET),新方法可以简化为:@GetMapping(“/get/{id}”)。
三、Swagger常见注解@API、@ApiOperation、@ApiParam等
1、@API
使用在类上,表明是swagger资源,@API拥有两个属性:value、tags,生成的api文档会根据tags分类,直白的说就是这个controller中的所有接口生成的接口文档都会在tags这个list下;tags如果有多个值,会生成多个list,每个list都显示所有接口
2、@ApiOperation
使用于在方法上,表示一个http请求的操作
源码中属性太多,记几个比较常用
value用于方法描述
notes用于提示内容
tags可以重新分组(视情况而用)
3、@ApiParam
使用在方法上或者参数上,字段说明;表示对参数的添加元数据(说明或是否必填等)
name–参数名
value–参数说明
required–是否必填
4、@ApiModel()
使用在类上,表示对类进行说明,用于参数用实体类接收
value–表示对象名
description–描述
5、@ApiModelProperty()
使用在方法,字段上,表示对model属性的说明或者数据操作更改
value–字段说明
name–重写属性名字
dataType–重写属性类型
required–是否必填
example–举例说明
hidden–隐藏
四、lombok @Slf4j注解
在idea中添加插件lombok,在pom文件添加依赖;
如果不想每次都写private final Logger logger = LoggerFactory.getLogger(XXX.class),就可以用注解@Slf4j
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Test {
}
五、Spring AOP注解
/***
eg:ExampleAspect 是一个切面类
/
@Aspect // @Aspect用来标注切面类。
public class ExampleAspect {
//@Pointcut注解括号内是pointcut expression,例子中的表达式表示com.psjay.example.spring.aop的所有方法都是join point。
@Pointcut("execution( com.psjay.example.spring.aop..*(…))")
public void aPointcut() {
//@Pointcut标注一个空的方法,用来代表一个pointcut;
}
@Before(“aPointcut()”)
public void beforeAdvice() {
System.out.println(“before advice is executed!”);
}
@AfterReturning(pointcut = “aPointcut()”, returning=“r”)
public void afterReturningAdvice(String r) {
if (r != null)
System.out.println("after returning advice is executed! returning String is : " + r);
}
@After(“aPointcut()”)
public void AfterAdvice() {
System.out.println(“after advice is executed!”);
}
@After(“aPointcut() && args(str)”)
public void AfterAdviceWithArg(String str) {
System.out.println("after advice with arg is executed!arg is : " + str);
}
@AfterThrowing(pointcut=“aPointcut()”,throwing=“e”)
public void afterThrowingAdvice(Exception e) {
System.out.println("after throwing advice is executed!exception msg is : " + e.getMessage());
}
@Around(“aPointcut()”)
public void around (ProceedingJoinPoint pjp) throws Throwable{
this.printLog(“Before the around method is executed!”);
pjp.proceed();
System.out.println(“After the around method is executed!”);
}
}
-
@Before(前置通知Before advice)是在所拦截方法执行之前执行一段逻辑。
-
@After 后通知(After advice是在所拦截方法执行之后执行一段逻辑。
-
@Around 环绕通知(Around advice) 是可以同时在所拦截方法的前后执行一段逻辑,用这个注解的方法入参传的是ProceedingJionPoint pjp,可以决定当前线程能否进入核心方法中——通过调用pjp.proceed();
六、@Repository注解的作用
@Repository和@Controller、@Service、@Component的作用差不多,都是把对象交给spring管理。@Repository用在持久层的接口上,这个注解是将接口的一个实现类交给spring管理。
接口上使用了@Mapper注解或者springboot中主类上使用了@MapperScan注解,和spring配置文件中配置了MapperScannerConfigurer这个bean作用一样,它会扫描持久层接口创建实现类并交给spring管理。