Spring注解文档(部分)

Spring注解文档(部分)

@Controller

标识这是一个controller类

@Responsebody

为方法做修饰时表示方法的返回值会被放到查询的response中,也就是比如返回值是一个String“justin”,HttpResponse的body部分就是“justin”,在客户端就只看到这几个字。如果把这个注释放在类上,则相当于为此类的所有方法做了该注释。但是如果在一个有此注解的类的方法中返回ModelAndView它还是会跳转到view中,@ResponseBody就不起作用了。

@RestController

等同于**@Controller **+ @ResponseBody

@RequiredArgsConstructor(!此注解是Lombok提供的和Spring IoC没任何关系,单独使用此注解,Spring不会托管)

通过构造器的方式进行依赖注入,Spring不推荐使用**@Autowire**注解注入,推荐使用此注解。

为类中需要特殊处理的字段生成构造方法(此注解生成的是有参构造方法),比如final和被**@NonNull**注解的字段

生成的构造方法会被Spring托管(前提是继承接口的类已经声明给Spring),然后进行反射注入

例如,在一个加有此注解的类中,有以下字段,TokenService是一个接口

private final TokenService tokenService;

此方法可能会造成循环依赖问题,@RequiredArgsConstructor(onConstructor_ = @Lazy)
使用懒加载解决

@RequestMapping

用于定义映射路径,建立请求url和控制层方法之间的对应关系。

标注在类上,意味着value值为根路径,类中的其他路径,为二级路径。

例如

@RestController
@RequiredArgsConstructor
@RequestMapping("/ssh/config")
public class SSHConfigController {
    private final TokenService tokenService;
    @PostMapping("/set")
     public R<Void> setConfig(@CookieValue(value = "token", required = false) String token,
                             @RequestBody ConnectionConfig config) {
        var sshConfigManager = new SSHConfigManager(sshConfigDao);

        return EnhancedR.stream()
                .check(!tokenService.isSuperAdmin(token), MsgMapping.PERMISSION_DENIED)
                .exec(() -> sshConfigManager.setConfig(config))
                .build();
    }
}

完整请求路径为…/ssh/config/set

@RequestBody

接收前端传来的请求体装配config

如果参数是放在请求体中,application/json传入后台的话,那么后台要用@RequestBody才能接收到;
如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或
着形参前 什么也不写也能接收。

@RequestParam(xxx)

如果参数前写了@RequestParam(xxx),那么前端必须有对应的xxx名字才行(不管其是否有值,当然可以通
过设置该注解的required属性来调节是否必须传),如果没有xxx名的话,那么请求会出错,报400。

@Slf4j(!Lombok提供)

实现日志输出

使用@Slf4j以后,默认的Slf4j对象就是log,所以使用时候可以直接log.info()、log.error()……

@Configuration

标注在类上,配置spring容器(应用上下文)。相当于把该类作为spring的xml配置文件中的<beans>

修饰的类是一个cglib的代理对象,一般修饰配置类,类中的方法用@Bean修饰。

@Bean

使用@Bean注解标注的方法,返回的类型都会直接注册为bean。

@Data(!Lombok提供)

自动生成getter,setter,toString()等方法,不用人为实现。

@CrossOrigin

是用来处理跨源资源共享(CORS)的注解

注解解析

① value:

指定允许请求源列表,例如:value=“http://example.com”。

* 表示允许来自任意请求源的请求。

其值存储在响应标头Access-Control-Allow-Origin中。

默认情况下,其值为 * ,允许来自任意请求源的请求。

注意:CORS处理时,从Forwarded、X-Forwarded-Host、X-Forwarded-Port、X-Forwarded-Proto取请求源值。

② origins:

value与origins含义相同,可以任选value和origins进行设置。

value与origins若同时存在,两者的值需一致,否则启动时会出现异常。

③ allowedHeaders:

指定允许实际请求标头列表,例如:allowedHeaders=“Content-Type,Access-Token”。

*表示允许实际请求带有任意标头。

其值存储在响应标头Access-Control-Allow-Headers中。

若为Cache-Control、Content-Language、Expires、Last-Modified、Pragma,则无需设置。

默认情况下,其值为*,允许实际请求带有任意标头。

④ exposedHeaders:

指定允许客户端(如浏览器)访问的响应标头列表,例如:exposedHeaders=“Content-Length”。

其值存储在实际CORS请求的响应头Access-Control-Expose-Headers中。

默认情况下,只允许客户端访问:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。

⑤ methods:

指定允许请求的HTTP方法。

默认情况下,允许请求的HTTP方法与@RequestMapping相同。

⑥ allowCredentials:

指定其值,表示客户端(如浏览器)是否应将凭证(如Cookies)和跨域请求一起发送到服务器。

其值存储在预处理响应标头Access-Control-Allow-Credentials中。

注意:此选项与配置域建立了高级别的信任,由于公开敏感的信息(如Cookies或CSRF令牌),会增加Web应用程序受攻击的概率。

默认情况下,此值不设置,因此不允许使用任何凭证。

⑦ maxAge:

指定预处理响应的最大缓存期限,单位为秒。

其值存储在预处理响应标头Access-Control-Max-Age中。

其值设置合理可以有效减少客户端与服务器预处理请求的交互次数。

其值为负,表示未定义。

默认情况下,其值为1800秒(30分钟)。

@Component

标注Spring管理的Bean,使用@Component注解在一个类上,表示将此类标记为Spring容器中的一个Bean,

@Repository@Service@Controller均为此注解的扩展,用法与之相同。

@Repository

这个注解是将接口的一个实现类交给Spring管理(在Spring中有开启对@Repository注解的扫描),当哪些地方需要用到这个实现类作为依赖时,就可以注入了.当然我们也可以主动给这个实现类命名**@Repository(“xxx”),被@Repository注解的POJO类表示DAO层**实现,从而见到该注解就想到DAO层实现。

@Service

标记当前类为service类,会将当前类自动注入到Spring容器内,相当于被Spring托管。被**@Service注解的POJO类表示Service层**实现,从而见到该注解就想到Service层实现

@Modifying(Spring Data Jpa)

1、在**@Query注解中编写JPQL实现DELETEUPDATE操作的时候必须加上@Modifying注解,以通知Spring Data 这是一个DELETEUPDATE**操作。

2、UPDATE或者DELETE操作需要使用事务,此时需要 定义Service层,在Service层的方法上添加事务操作。

3、注意JPQL不支持INSERT操作。

@Transactional(Spring Data Jpa)

@Tranasctional注解是Spring 框架提供的声明式注解事务解决方案,我们在开发中使用事务保证方法对数据库操作的原子性,要么全部成功,要么全部失败,在使用@Transactional注解时需要注意以下问题:

  1. @Transactional 注解只能用在public 方法上,如果用在protected或者private的方法上,不会报错,但是该注解不会生效。
  2. @Transactional注解只能回滚非检查型异常,具体为RuntimeException及其子类和Error子类,可以从Spring源码的DefaultTransactionAttribute类里找到判断方法rollbackOn。
  3. 使用rollbackFor 属性来定义回滚的异常类型,使用 propagation 属性定义事务的传播行为。如: 回滚Exception类的异常,事务的传播行为支持当前事务,当前如果没有事务,那么会创建一个事务。
  4. @Transactional注解不能回滚被try{}catch() 捕获的异常。
    ansactionAttribute类里找到判断方法rollbackOn。
  5. 使用rollbackFor 属性来定义回滚的异常类型,使用 propagation 属性定义事务的传播行为。如: 回滚Exception类的异常,事务的传播行为支持当前事务,当前如果没有事务,那么会创建一个事务。
  6. @Transactional注解不能回滚被try{}catch() 捕获的异常。
  7. @Transactional注解只能对在被Spring 容器扫描到的类下的方法生效。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值