spring、springboot不常用但很有效的注解(一直要完善)

1.  @ModelAttribute

      使用在controller层的方法中,作用:在controller中使用@RequestMapping修饰的每个方法的使用前执行。

      https://blog.csdn.net/li_xiao_ming/article/details/8349115

2. @Resource 、 @Autowired、 @Qualifier

    @Resource: jdk提供的自动注入,使用ByName注入

    @Autowired:spring提供的自动注入,使用ByType注入

    @Qualifier:在使用Autowired注入的同时,Qualifier提供了ByName注入方式。

@Service("downloadPersonInfoFileService")
public class DownloadPersonInfoExcelFileServiceImpl implements IDownloadFileService
{
 
    public boolean downloadExcelFile()
    {
        System.out.println("PersonInfoFile");
        return false;
    }
}
 
@Service("downloadEnterpriseInfoFileService")
public class DownloadEnterpriseInfoExcelFileServiceImpl implements IDownloadFileService
{
    public boolean downloadExcelFile()
    {
        System.out.println("EnterpriseInfoFile");
        return false;
    }
}

@Controller
public class DownloadFileController
{
    @Autowired
    @Qualifier("downloadPersonInfoFileService")
    private IDownloadFileService downloadPersonInfoFileService;
 
    @Autowired
    @Qualifier("downloadEnterpriseInfoFileService")
    private IDownloadFileService downloadEnterpriseInfoFileService;
 
    @RequestMapping(value="/downloadPersonInfo", method = {RequestMethod.GET})
    @ResponseBody
    public String doanloadPersonInfoExcelFile()
    {
        downloadPersonInfoFileService.downloadExcelFile();
        return "PernsonInfoFile";
    }
 
    @RequestMapping(value="/downloadEnterpriseInfo", method = RequestMethod.GET)
    @ResponseBody
    public String doanloadEnterpriseInfoExcelFile()
    {
        downloadEnterpriseInfoFileService.downloadExcelFile();
        return "EnterpriseInfoFile";
    }
}

3. @PostConstruct

     使用在方法上。作用:用该注解修饰的方法,表示在类初始化时,进行执行。

     注意:construction > @Autowired > @PostConstruct

4. @Scheduled  (定时任务) 和  @EnableScheduling

     1.使用在配置类上,2.在配置类上使用@EnableScheduling表示开启任务,3.在对应的方法上使用@Scheduled表示执行的方法。

    Scheduled注解的参数:

     1.corn   2.zone  3.fixedDelay和fixedDelaystring  4.fixedRate和fixedRateString 5. initialDelay和initialDelayString

           1.cron是设置定时执行的表达式,如 0 0/5 * * * ?每隔五分钟执行一次  cron([Seconds] [Minutes] [Hours] [Day of month] [Month] [Day of week] [Year] )

             spring、springboot不常用但很有效的注解(一直要完善)_第1张图片

               spring、springboot不常用但很有效的注解(一直要完善)_第2张图片

            2.zone表示执行时间的时区

           3.fixedDelay和fixedDelaystring表示一个固定延迟时间再执行,表示上个任务完成后,延迟多长时间执行

           4.fixedRate和fixedRateString 固定频率执行。单位毫秒;fixedRate = 1000 (每隔一秒执行)

           5.initialDelay 表示将第一次计划推迟多久后进行执行,需要和fixedRate进行配合,@Scheduled(fixedRate =1000, initialDelay=10000)

详细查看: https://www.javacodegeeks.com/2018/02/running-time-springs-scheduled-tasks.html

 

5、requestBody 接受request数据的注意点

     1.对于GET/POST提交时,

            支持application/x-www-form-urlencoded,可选(也可以用@requestParam,@ModelAttribute)

            multipart/form-data,不能处理。

           其他格式,必须使用(例如application/json、application/xml等,只能用@RequestBody接受)

     2. 对于PUT提交。

          multipart/form-data, 不能处理

         其他格式,必须使用。

6、@JsonFormat@JsonInclude

         @JsonFormat (timezone = "GMT+8",pattern = "yyyy-MM-dd") 在实体上使用时间格式

         @JsonInclude (JsonInclude.include.NON_NULL) 忽略null属性

7、@ControllerAdvice 处理异常

8、@EventListener

9、@Transient  和 @ JsonIgnore

      Transient 表示 不进行序列化 。JsonIgnore表示在将Javabean转化为json时,取消对应的字段。

10、@Primary

     当一个接口有多个实现类,spring 在使用接口注入时,就会报错,找不到注入类。因此用@primary告诉spring 是注入的哪个类。

@Component  
public class MetalSinger implements Singer{  
  
    @Override  
    public String sing(String lyrics) {  
        return "I am singing with DIO voice: "+lyrics;  
    }  
} 

@Component 
public class OperaSinger implements Singer {  
    @Override  
    public String sing(String lyrics) {  
        return "I am singing in Bocelli voice: "+lyrics;  
    }  
}  

@Component  
public class SingerService {  
    private static final Logger logger = LoggerFactory.getLogger(SingerService.class);  
  
    @Autowired  
    private Singer singer;  
  
    public String sing(){  
        return singer.sing("song lyrics");  
    }  
}

如上代码就会报错,spring找不到注入的类。就需要在 private Singer singer;上加入@Primary,告诉spring 应该用哪个注入。

其实还有一个方法。

 

11.@SuppressWarnings

    通知编译器忽略指定警告。

12 @RequestMapping中的consumes和produces

@RequestMapping(value = "helloword", consumes = "application/json", produces = "application/xml")

 在request header中有contentType 和 accept属性,contentType表示客户端发送给服务端的格式,accept表示客户端接受服务端的格式。与之对应的服务器端的就是用consumes和produces。consumes对应contentType,produces对应accept。

13 @RestControllerAdvice

@RestControllerAdvice是@ResponseBody和@Component组成。仅仅用作增强。

14 实现ResponseBodyAdive

需求:需要给每一个请求,在返回时,修改responseBody的值。

不可以在拦截器的postHandler方法中修改的原因:当controller中返回json时,响应会先于postHandler方法,传入到handlerAdapter中。

public class MyResponseBody implements ResponseBodyAdvice {

    @Override
    public boolean supports(MethodParameter methodParameter, Class aClass) {
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
       
        return o;
    }
}

其中,supports方法返回ture,表示当controller执行后,会调用beforeBodyWrite方法。对responseBody进行设置。

你可能感兴趣的:(后端)