spring全家桶常见注解---@Repository、@Autowired、@Controller等

一、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文件添加依赖;

<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
</dependency>

如果不想每次都写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管理。

不使用@Repository注解,idea会报警告,提示找不到这个bean,直接忽略即可。
在这里插入图片描述
@Repository的作用:
这是因为该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。 Spring本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只IT攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值