@RequestBody注解的使用
1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。
2.通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。
3.在一些特殊情况@requestBody也可以用来处理content-type类型为application/x-www-form-urlcoded的内容,只不过这种方式不是很常用,在处理这类请求的时候,@requestBody会将处理结果放到一个MultiValueMap<String,String>中,这种情况一般在特殊情况下才会使用,
例如jQuery easyUI的datagrid请求数据的时候需要使用到这种方式、小型项目只创建一个POJO类的话也可以使用这种接受方式
@MapperScan(" ")
用于指定项目中mapper的位置:
例如:@MapperScan("com.gsafety.webmagic.schedule.common.mapper")
@EnableDiscoveryClient与@EnableEurekaClient
都是Eureka注册中心的两种注解,@EnableEurekaClient注解是@EnableDiscoveryClient的实现
参考链接:https://blog.csdn.net/belalds/article/details/80822060
@controller 控制器(注入服务)
@service 服务(注入dao)
@repository dao(实现dao访问)
@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)
@Order 注解
@Order注解主要用来控制配置类的加载顺序
/**
* 初始化启动类
*/
@Component
@Order(value = 1)
public class InitApplicationRunner implements ApplicationRunner {
@Resource
private IDynamicTask dynamicTaskImpl;
@Override
public void run(ApplicationArguments var1) throws Exception {
dynamicTaskImpl.initOrRecheckScheduleJob();
}
}
value属性越小,优先级越高(越先加载)
@EnableScheduling和@Scheduled的使用
定时任务在配置类上添加@EnableScheduling开启对定时任务的支持,在相应的方法上添加@Scheduled声明需要执行的定时任务。
其中Scheduled注解中有以下几个参数:
- cron
- zone
- fixedDelay和fixedDelayString
- fixedRate和fixedRateString
-
initialDelay和initialDelayString
1.cron是设置定时执行的表达式,如 0 0/5 * * * ?每隔五分钟执行一次
2.zone表示执行时间的时区
3.fixedDelay 和fixedDelayString 表示一个固定延迟时间执行,上个任务完成后,延迟多长时间执行
4.fixedRate 和fixedRateString表示一个固定频率执行,上个任务开始后,多长时间后开始执行
5.initialDelay 和initialDelayString表示一个初始延迟时间,第一次被调用前延迟的时间
@Scope
当设置为prototype时:每次连接请求,都会生成一个bean实例,也会导致一个问题,当请求数越多,性能会降低,因为创建的实例,导致GC频繁,gc时长增加。
设置为单例模式:保证了全局都会有一个实例,对性能有所提高,但是如果实例中有非静态变量时,会导致线程安全问题,共享资源的竞争。
默认是单例模式,即scope="singleton"。另外scope还有prototype、request、session、global session作用域。scope="prototype"多例
@scope默认是单例模式(singleton)
如果需要设置的话@scope("prototype")
1.singleton单例模式,
全局有且仅有一个实例
2.prototype原型模式,
每次获取Bean的时候会有一个新的实例
3.request
request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效,配置实例:
request、session、global session使用的时候首先要在初始化web的web.xml中做如下配置:
如果你使用的是Servlet 2.4及以上的web容器,那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可:
4.session
session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
5.global session
global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个 portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么web会自动当成session类型来使用。
@FeignClient(name= "webmagic-childrenlist-server")
使用HTTP请求远程服务
参考网址:https://www.cnblogs.com/jalja/p/7011439.html
@JSONField注解的使用
FastJson中的注解@JSONField,一般作用在get/set方法上面,常用的使用场景有下面三个:
- 修改和json字符串的字段映射【name】
- 格式化数据【format】
- 过滤掉不需要序列化的字段【serialize】
参考网址:https://www.cnblogs.com/yucy/p/9057049.html
@Controller和@RestController的区别?
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
1) 如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
2) 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
参考:https://www.cnblogs.com/shuaifing/p/8119664.html