springboot项目开发常用注解

项目开发中,合理使用注解,可以提高开发效率。使我们更专注于业务逻辑的实现。

SpringBoot自动装配注解

@SpringBootApplication注解

相较于传统的java应用,springboot应用只用添加一个@SpringBootApplication注解就可以成功运行,是不是简便很多。@SpringBootApplication注解主要由@Target、@Retention、@Documented、@Inherited、@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan等7个注解组成,前四个为创建注解类必须的(有需要了解的可以自查),其核心为后面3个注解。
@SpringBootApplication注解部分源码如下:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.springframework.boot.autoconfigure;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.core.annotation.AliasFor;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    Class<?>[] exclude() default {};

    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    String[] excludeName() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackages"
    )
    String[] scanBasePackages() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackageClasses"
    )
    Class<?>[] scanBasePackageClasses() default {};

    @AliasFor(
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}

@SpringBootConfiguration注解

点进去源码可以知道,其实为@Configuration。加上这个注解就是为了让当前类作为一个配置类交由 Spring的IOC容器进行管理。

@EnableAutoConfiguration注解

由@AutoConfigurationPackage和@Import注解组成。
SpringBoot通过@EnableAutoConfiguration注解开启自动配置,加载spring.factories文件中注册的各种AutoConfiguration,当某个AutoConfiguration类满足@Conditional指定的生效条件时,实例化该AutoConfiguration类中定义的Bean,注入到Spring容器中,就可以完成依赖框架的自动配置。

@AutoConfigurationPackage注解

@AutoConfigurationPackage注解的作用是将添加该注解的类所在的package作为自动配置package进行管理。

@Import注解

确保类被扫描到,然后被springboot容器自动装配。

@ComponentScan 注解

定义 Spring 的扫描路径,等价于在 xml 文件中配置 context:component-scan,假如不配置扫描路径,那么 Spring 就会默认扫描当前类所在的包及其子包中的所有标注了 @Component,@Service,@Controller 等注解的类。

http请求相关注解

@Controller注解

@Controller标识的类,该类代表控制器类(MVC中的C,控制层/表现层)。
这里控制层里面的每个方法,都可以去调用@Service标识的类(MVC中的V,业务逻辑层),@Service标识的类中的方法可以继续调用@Resposity标识的接口实现类(MVC中的M,Dao层/持久层)。

@RestController复合注解

@RestController 是@controller和@ResponseBody 的结合。
@Controller 将当前修饰的类注入SpringBoot IOC容器,使得从该类所在的项目跑起来的过程中,这个类就被实例化。@ResponseBody 它的作用简单点说就是指该类中所有的API接口返回的数据,甭管你对应的方法返回Map或是其他Object,它会以Json字符串的形式返回给客户端。

@RequestBody注解

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),所以只能发送POST请求。

@ResponseBody注解

将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区(响应体中),通常用来返回JSON数据或者是XML。

@RequestMapping注解

用在类定义处和方法定义处,就是来映射服务器访问的路径。

@GetMapping注解

等价于@RequestMapping(value=“/*”,method=RequestMethod.GET)。

@PostMapping注解

等价于@RequestMapping(value=“/*”,method=RequestMethod.POST)。

@PathVariable注解

@PathVariable 映射URL绑定的占位符。通过@PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL中的{xxx}占位符可以通过@PathVariable(“xxx”) 绑定到操作方法的入参中。

@RequestMapping("/getUserById/{name}")
public User getUser(@PathVariable("name") String name){
    return userService.selectUser(name);
}

@Value注解

@Value的作用是通过注解将常量、配置文件中的值、其他bean的属性值注入到变量中,作为变量的初始值。

@RequestParam注解

把请求中的指定名称的参数传递给控制器中的形参赋值。可设置必填非必填,默认值等等。

@RequestHeader注解

可以将请求头中变量值映射到控制器的参数中。

@GetMapping("/getUserInfo")
public R<User> getUserInfo(@RequestHeader(value = "token") String token) {
    return null;
}

@CookieValue注解

用来获取Cookie中的值。

@GetMapping("verify")
public ResponseEntity<UserInfo> verifyUser(@CookieValue("token") String token) {
    // 获取token信息
    UserInfo userInfo = JwtUtils.getInfoFromToken(token, prop.getPublicKey());
    // 成功后直接返回
    return ResponseEntity.ok(userInfo);
}

bean相关注解

@Bean注解

用于将对象存入spring的ioc容器中,一般用在方法上面。

@Component注解

定义Spring管理Bean(也就是将标注@Component注解的类交由spring管理)。

@Service注解

在类上使用该注解,表示其是一个Service。加上该注解会将当前类自动注入到spring容器中。

@Repository注解

@Repository和@Controller、@Service、@Component的作用差不多,都是把对象交给spring管理。@Repository用在持久层的接口上,这个注解是将接口的一个实现类交给spring管理。

@Scope作用域注解

@Scope注解主要作用是调节Ioc容器中的作用域,在Spring IoC容器中主要有以下五种作用域:基本作用域:singleton(单例)、prototype(多例);Web 作用域(reqeust、session、globalsession),自定义作用域。默认为单例作用域。

@Entity注解

@Entity 注解用于类上面,用来指定该类是一个实体。

@Entity("userEntity")
@Table(name = "users")
public class User {
}

如果使用@Entity注解的name属性且没有与@Table结合,则默认将name属性的值转换成小写后作为表名称。
@Entity注解必须与@Id注解结合使用。

@Autowired注解

使构造函数、字段、设值方法或配置方法可以被Spring依赖注入工具自动装配(Autowired)。

@Qualifier注解

@Qualifier 注解作用就是为了给Bean打上一个标记,用来查找bean。

导入配置文件

@PropertySource注解

@PropertySource注解用于指定资源文件读取的位置,它不仅能读取properties文件,也能读取xml文件,并且通过yaml解析器,配合自定义PropertySourceFactory实现解析yaml文件。

@ImportResource注解

@ImportResource注解用于导入Spring的配置文件,让配置文件里面的内容生效。(就是以前写的springmvc.xml、applicationContext.xml)。

@Import注解

@Import注解,顾名思义,导入,即把类加入Spring IOC容器。

事务注解

@Transactional注解

保证方法内多个数据库操作要么同时成功、要么同时失败。

异常处理注解

@ControllerAdvice注解

在Spring里,我们可以使用@ControllerAdvice来声明一些全局性的东西。常用的方式是使用@ControllerAdvice+@ExceptionHandler的组合来实现全局自定义异常。

@ExceptionHandler注解

@ExceptionHandler注解我们一般是用来自定义异常的。

@ModelAttribute注解

@ModelAttribute注解用于将方法的参数或方法的返回值绑定到指定的模型属性上,并返回给Web视图。

@InitBinder注解

@InitBinder注解可以作用在被@Controller注解的类的方法上,表示为当前控制器注册一个属性编辑器,用于对WebDataBinder进行初始化,且只对当前的Controller有效。如:将前端传递过来的字符串格式的日期数据,转化为DATE类型。

lombok注解

@Data注解

注在实体类上,提供类的get、set、equals、hashCode、toString等方法。

@AllArgsConstructor

注在实体类上,提供类的全参构造

@NoArgsConstructor

注在实体类上,提供类的无参构造

@EqualsAndHashCode

注在实体类上,提供对应的 equals 和 hashCode 方法

@Log4j/@Slf4j

注在实体类上,提供对应的 Logger 对象,变量名为 log

@Setter

注在属性上,提供 set 方法

@Getter

注在属性上,提供 get 方法

mybatisplus注解

@TableName

在实体类上指定,指定实体类和数据库表的映射关系。当实体类的类名在转成小写后和数据库表名相同时,可以不指定该注解。

@TableName("user");

@Tableld

用于指定实体类的某个属性为对应的数据表中的主键。

// value:指定对应表中的字段名,当声明的属性名和表中的字段名一致的时候可以省略不写。
// type:是主键的类型,AUTO代表的主键自增
@TableId(value = "id", type = IdType.AUTO);   
private Integer id;

@TableField

解决实体类中属性名和表中的字段名不一致(非驼峰),还有对象中的某个属性不在表中进行忽略。

// select表示不在查询结果中展示,value对应数据库字段名,fill表示自动填充,有INSERT,UPDATE等等,exist = false则表示该属性在数据库表中不存在
@TableField(select = false, value = "userName", fill = FieldFill.INSERT, exist = false)

定时任务注解

@EnableScheduling注解

@EnableScheduling开启对定时任务的支持。

@Scheduled注解

@Scheduled注解是Spring Boot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行。

cron表达式格式:
@Scheduled(cron = "{秒数} {分钟} {小时} {日期} {月份} {星期}")
cron表达式示例:
@Scheduled(cron = "0 00 07 * * *")

redis相关注解

@EnableCaching注解

@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了。
当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理。

@Cacheable注解

@Cacheable 的作用主要针对方法配置,能够根据方法的请求参数对其结果进行缓存。

@CacheEvict注解

@CacheEvict来实现缓存的删除。

@ApiOperation(value = "清空缓存")
@CacheEvict(value = {"systemSetting"},key="#id.toString()",allEntries = true,beforeInvocation=true)
@GetMapping("/clearCache")
public ApiResult clearCache(){
    ApiResult result = new ApiResult();
    result.getData().put("result",redisUtils.clear());
    return result;
}

@CachePut注解

@CachePut 的作用主要针对方法配置,能够根据方法的请求参数对其结果进行缓存,和 @Cacheable不同的是,它每次都会触发真实方法的调用。

@CacheConfig注解

如果一个类中,多个方法都有同样的cacheName,keyGenerator,cacheManager 和 cacheResolver,可以直接使用@CacheConfig注解在类上声明,这个类中的方法都会使用@CacheConfig属性设置的相关配置。

JSON相关注解

@JsonIgnore注解

json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

@JsonFormat注解

@JsonFormat注解是一个时间格式化注解,用于格式化时间。

@JsonInclude注解

@JsonInclude注解的作用是指定实体类在序列化时的策略。

@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
	// ...
}
  • ALWAYS:表示总是序列化所有属性。
  • NON_NULL:表示序列化非null属性。
  • NON_ABSENT:表示序列化非null或者引用类型缺省值,例如java8的Optional类,这个选中通常与Optional一起使用。
  • NON_EMPTY:表示序列化非Empty的属性,例如空的集合不会被序列化。
  • NON_DEFAULT:仅包含与POJO属性默认值不同的值。
  • CUSTOM:由{@link JsonInclude#valueFilter}指定值本身,或由{@link JsonInclude#contentFilter}指定结构化类型的内容,由过滤器对象的equals方法进行序列化,返回true则会被排除,返回false会被序列化。
  • USE_DEFAULTS:使用默认值。

JsonField注解

放在bean属性上,表示不管属性值空或者非空都不返回。如updateTime,createTime等字段。

@JSONField(serialize = false)

异步注解

@Async注解

@Async的作用就是异步处理任务。

@EnableAsync注解

开启异步线程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码上飞跃

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

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

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

打赏作者

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

抵扣说明:

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

余额充值