SpringBoot的基础注解

文章详细阐述了SpringMVC中几个关键注解的用法,包括@RequestParam用于处理请求参数,@DateTimeFormat处理日期时间格式,@RequestBody用于接收JSON格式参数,@PathVariable获取路径变量,以及@Controller、@ResponseBody、@ComponentScan等其他注解的用途。
摘要由CSDN通过智能技术生成

@RequestParam:

1、在前端传入多个相同的属性时,若使用数组接收,则无需使用@RequestParam注解。若使用集合接收,则须使用@RequestParam来绑定参数。

2、当前端发送的属性名与服务端接收的不一致时,可以使用@RequestParam(接收的属性名=“前端发来的属性名”)来绑定接收,括号里面有个required属性,默认为true,若为true,则表示绑定的属性不可为空,不然会报错。若为false则不会报错。
3、 @RequestParam(defaultValue = “1”) Integer page, @RequestParam(defaultValue = “10”) Integer pageSize
当前端传来null时,defaultValue属性设置默认值

@DateTimeFormat:

@DateTimeFormat里面有个pattern属性,用于指定前端传来的日期时间格式,如:
@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)

@RequestBody

@RequestBody可以将前端发送来的json格式的参数封装进一个实体类对象中,
前端以JSON格式发送实体类对象请求必须用@RequestBody注解,不使用@RequestBody注解则需要以form-data的方式接收。

@PathVariable

用于获取路径变量,并绑定给形参。有时候前端请求的路径不是写死的,比如是和id相关的,每个人的id不同,访问路径也不同,就需要设置路径变量,变量是多少,路径就是多少,如:
http://localhost:8080/pathParam/521
http://localhost:8080/pathParam/125
后面的521和125就是不同的路径变量

@RequestMapping

@RequestMapping
当注解在类上时,其路径为父路径,该类中的方法的路径为子路径。如:类的注解为@RequestMapping(“/parent”),该类某个方法的注解为@RequestMapping(“/get”),则该方法的请求路径为…/parent/get

路径参数:/{变量}

@RequestMapping("/pathParam/{id}")
    public String pathParam(@PathVariable Integer id){
        System.out.println(id);
        return "OK";
    }

当传入多个路径参数时:

http://localhost:8080/pathParam/521/cxl
http://localhost:8080/pathParam/125/陈熙龙

@RequestMapping("/pathParam/{id}/{name}")
    public String pathParam(@PathVariable Integer id,@PathVariable String name){
        System.out.println(id+":"+name);
        return "OK";
    }

@RestController

@RestController = @Controller + @ResponseBody

@ResponseBody

@ResponseBody 使用在Controller方法上或者类上 ,将方法返回值直接响应,如果返回值类型是 实体对象/集合/数组,将会转换为JSON格式相应

@Component(建议使用其衍生注解:@Controller,@Service,@Repository,用于区分哪个层的)

@Component(value = “bean名”),value可以省略,其三个衍生注解同样可以指定bean名,bean的名字默认为首字母小写的类名。:声明控制器bean只能使用@Controller
常用于DAO层和Service层的上,将当前类交给IOC(控制反转)容器管理,成为IOC容器中的bean,也可用于Dao层和Service层之外的其他类
如:

@Component
public class EmpService {
    @Autowired
    private EmpDao empDao;

@Controller

@Component的衍生注解,标注在Controller/控制器类上,作用与@Component一样,用的少,@RestController包含@Controller

@Service

@Component的衍生注解,标注在Service/业务类上,作用与@Component一样

@Repository

@Component的衍生注解,标注在DAO/数据访问类上,作用与@Component一样(由于与mybatis整合,用的少)

@ComponentScan

用于扫描bean的,未被扫描到的bean即为不存在于IOC容器,隐式的配置在启动类上,默认的扫描范围是启动类所在包及其子包 。@ComponentScan({{“指定要扫描的包”,“…”}}),一旦指定,就得额外显式声明默认范围

@Autowired

常用于Service层与Controller层分别声明的DAO层接口属性和Service层接口属性上,程序运行时,IOC容器会提供该类型的bean对象,并赋值给该变量 DI-依赖注入,默认是按照类型注入
如:

public class EmpController {
    @Autowired
    private EmpService empService;

@Primary,@Qualifier

由于@Autowired注解是按照类型注入的,一旦同一个类型的bean有多个,就不知道注入哪个,会报错。
@Primary,@Qualifier 就是为了解决这个问题,
@Primary可以指定bean的优先级,类在使用@Autowired的同时加上@Primary,就会优先注入此类的bean.
@Qualifier可以声明要注入bean的名字,类在使用@Autowired的同时加上@Qualifier,就会优先注入此bean,@Qualifier(“名字”)。

@Resource

@Autowired注解默认是按照类型注入的,而@Resource是按照bean名字来注入的,@Resource(name=“bean名”),可以替代@Autowired,此注解是jdk提供的,而@Autowired是Spring框架提供的

@Value(“${引用类型的值}” / “值”)

用于注入配置文件中的配置,为属性赋值,如
类中:
@Value(“${aliyun.oss.endpoint}”)
private String endpoint;
配置文件中:
aliyun.oss.endpoint=https://oss-cn-nanjing.aliyuncs.com

@ConfigurationProperties(prefix=“前缀”)

用于注入配置文件的配置,需要与@Data和@Component同时使用才能生效,获取配置信息的值可以通过@Autowired 然后调用get方法来获取,如

aliyun:
  oss:
    endpoint: https://oss-cn-nanjing.aliyuncs.com
    accessKeyId: LTAI5t9XbmziYWNSZTBjMAAJ
    accessKeySecret: cFN2l4a1EXDWdSBdW2QbpnfpkTzQrL
    bucketName: web-tlias-cxl
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSUtils {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;

@Autowired
private AliOSSUtils alioss;
alioss.getEndPoint();
......

@Transactional

使用在方法、类、接口上,用于开启事务、回滚、提交事务。 多用于有多次访问的增删改查的Controller类方法上 ,默认情况下只有出现RuntimeException才会回滚异常,

rollbackFor属性可以控制出现何种异常类型时回滚事务
@Transactional(rollbackFor = Exception.class) //用于所有异常

事务传播行为:指的是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制
propagation属性可以指定传播行为
@Transactional(propagation = Propagation.REQUIRED) //默认行为



readonly属性可以设置事务为只读,为true时生效。事务中不会对数据库进行写操作。
这个参数对于数据库性能优化很有用,特别是在高并发的系统中。当一个事务被标记为只读时,数据库可以在一些情况下优化事务的处理,例如避免加锁等。这对于提高只读查询的吞吐量非常有帮助。总的来说,@Transaction(readonly=true) 是一个有用的工具,可以在只读操作上提供额外的保障和性能优势,即使这些操作不需要ACID属性。

但是,需要注意的是,只读事务并不意味着完全无锁。是否加锁还取决于具体的数据库和隔离级别设置。

在这里插入图片描述 yml文件中开启事务管理日志:

logging:
  	level:
  		org.springframework.jdbc.support.JdbcTransactionManager: debug

@CrossOrigin

进行前后端资源访问的跨域处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值