9. SpringBoot - 常用注解
一、前言🔥
我们都知道SpringBoot是采用纯java代码所创,不再需要配置繁杂的xml等配置
文件,在配置中也可享受面向对象所带来的好处,类型安全对重构提供了良好的支持,减少复杂配置文件的同时亦能享受到springIoC容器提供的功能。其实啊,有这些便利,很大程度都归结于注解的功劳,那先来看看,基本的常用注解有那些吧~
二、Spring Boot常用注解
ps:由于注解过多,小伙伴们可采用ctrl+F 来进行搜索哦。
- @SpringBootApplication
申明让
spring boot
自动给程序进行必要的配置,这个配置等同于:@Configuration
,@EnableAutoConfiguration
和@ComponentScan
三个配置。
- @ImportAutoConfiguration
导入配置类,一般做测试的时候使用,正常优先使用@EnableAutoConfiguration.
- @EnableAutoConfiguration
自动配置。
- @SpringBootConfiguration
这个注解实际就是一个@Configuration,标识启动类也是一个配置类。
- @ComponentScan
组件扫描,可自动发现和装配一些Bean。
- @Component
可配合CommandLineRunner使用,在程序启动后执行一些基础任务。
- @RestController
@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。
- @ResponseBody
该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用
- @RequestMapping
提供路由信息,负责URL到Controller中的具体函数的映射。
- @Autowired
自动导入依赖的bean。
- @Inject
等价于默认的@Autowired,只是没有required属性;
- @PathVariable
获取参数。
@JsonBackReference
解决嵌套外链问题。
- @Service
一般用于修饰service层的组件。
- @Bean
用@Bean标注方法等价于XML中配置的bean。
- @Value
注入Spring boot application.properties配置的属性的值。
- @Resource
@Resource(name=”name”,type=”type”);没有括号内内容的话,默认byName。与@Autowired干类似的事。
三、jpa注解
@Entity,@Table(name="")
表明这是一个实体类。一般用于
jpa
这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table
可以省略
@MappedSuperClass
用在确定是父类的
entity
上。父类的属性子类可以继承。
@NoRepositoryBean
一般用作父类的
repository
,有这个注解,spring
不会去实例化该repository
@Column
如果字段名与列名相同,则可以省略。
@Id
表示该属性为主键。
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”)
表示主键生成策略是
sequence
(可以为Auto
、IDENTITY
、native
等,Auto
表示可在多个数据库间切换),指定sequence
的名字是repair_seq
@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1)
name
为sequence
的名称,以便使用,sequenceName
为数据库的sequence
名称,两个名称可以一致。
@Transient
表示该属性并非一个到数据库表的字段的映射,
ORM
框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient
,否则,ORM
框架默认其注解为@Basic。
@Basic(fetch=FetchType.LAZY)
标记可以指定实体属性的加载方式。
@JsonIgnore
作用是
json
序列化时将Java bean
中的一些属性忽略掉,序列化和反序列化都受影响。
@JoinColumn(name=”loginId”)
一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。
@OneToOne、@OneToMany、@ManyToOne
对应hibernate配置文件中的一对一,一对多,多对一。
四、Lombok注解
@Setter
:
注解在属性上;为属性提供
setting
方法。
@Getter
:
注解在属性上;为属性提供
getting
方法。
@Data
:
注解在类上;提供类所有属性的
getting
和setting
方法,此外还提供了equals
、canEqual
、hashCode
、toString
方法。
@Log4j2
:
注解在类上;为类提供一个 属性名为
log
的log4j
日志对象,和@Log4j
注解类似。
@NoArgsConstructor
:
注解在类上;为类提供一个无参的构造方法。
@AllArgsConstructor
:
注解在类上;为类提供一个全参的构造方法。
@EqualsAndHashCode
:
默认情况下,会使用所有非瞬态(
non-transient
)和非静态(non-static
)字段来生成equals
和hascode
方法,也可以指定具体使用哪些属性。
@toString
:
生成
toString
方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。
@NoArgsConstructor
,@RequiredArgsConstructor
and@AllArgsConstructor
:
无参构造器、部分参数构造器、全参构造器,当我们需要重载多个构造器的时候,只能自己手写了。
@NonNull
:
注解在属性上,如果注解了,就必须不能为
Null。
@val
:
注解在属性上,如果注解了,就是设置为
final
类型,可查看源码的注释知道。
五、事务注解
- @Transactional
在Spring中,事务有两种实现,分别是编程式事务和声明式事务。
编程式事务: 编程式事务使用TransationTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务,spring推荐使用TransationTemplate。
声明式事务: 建立在AOP基础上,其本质是对方法前后进行拦截,然后再目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,通过@Transactional就可以进行事务操作,更快捷而且简单。推荐使用。
六、全局异常处理
- @ControllerAdvice:
包含@Component。可以被扫描到。统一处理异常。
- @ExceptionHandler(Exception.class):
用在方法上面表示遇到这个异常就执行以下方法。
七、springMVC相关注解
- @RequestMapping:
@RequestMapping(“/path”):表示该控制器处理所有“/path”的UR L请求。RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。
- @RequestParam:
用在方法的参数前面。
- @PathVariable:
路径变量。参数与大括号里的名字一样要相同。
... ...