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实现DELETE和UPDATE操作的时候必须加上@Modifying注解,以通知Spring Data 这是一个DELETE或UPDATE**操作。
2、UPDATE或者DELETE操作需要使用事务,此时需要 定义Service层,在Service层的方法上添加事务操作。
3、注意JPQL不支持INSERT操作。
@Transactional(Spring Data Jpa)
@Tranasctional注解是Spring 框架提供的声明式注解事务解决方案,我们在开发中使用事务保证方法对数据库操作的原子性,要么全部成功,要么全部失败,在使用@Transactional注解时需要注意以下问题:
- @Transactional 注解只能用在public 方法上,如果用在protected或者private的方法上,不会报错,但是该注解不会生效。
- @Transactional注解只能回滚非检查型异常,具体为RuntimeException及其子类和Error子类,可以从Spring源码的DefaultTransactionAttribute类里找到判断方法rollbackOn。
- 使用rollbackFor 属性来定义回滚的异常类型,使用 propagation 属性定义事务的传播行为。如: 回滚Exception类的异常,事务的传播行为支持当前事务,当前如果没有事务,那么会创建一个事务。
- @Transactional注解不能回滚被try{}catch() 捕获的异常。
ansactionAttribute类里找到判断方法rollbackOn。 - 使用rollbackFor 属性来定义回滚的异常类型,使用 propagation 属性定义事务的传播行为。如: 回滚Exception类的异常,事务的传播行为支持当前事务,当前如果没有事务,那么会创建一个事务。
- @Transactional注解不能回滚被try{}catch() 捕获的异常。
- @Transactional注解只能对在被Spring 容器扫描到的类下的方法生效。