@component与@service的区别 / @requestbody和@requestparams的区别

1@component@service的区别?

@Component spring基础的注解,被spring管理的组件或bean

@Repository 用于持久层,数据库访问层

@Service 用于服务层,处理业务逻辑

@Controller 用于呈现层,(spring-mvc)

相同点:

@Controller,@Service,@Repository都有带@Component父注解,四个注解都可以说成是Component级别的注解,

Spring框架自动扫描的注解也是检测是否有Component注解标记。把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>。

这三个注解它们除了@Component的属性外还有其他的的场景应用。

@Service

应用的业务逻辑通常在service层实现,因为我们一般使用@Service注解标记这个类属于业务逻辑层。

如@Service("userService")注解是告诉spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做"userService",

这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的"userService",然后注入给Action。

@Component

用来表示一个平常的普通组件,当一个类不合适用以上的注解定义时用这个组件修饰。

总结:

项目小的时候对这些注解没有特别的区分,但项目如果变得越来越大,那么就要划分的细致一些有一定的规则才方便大家的维护。

2@requestbody@requestparams的区别

@RequestParam

用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。

(Http协议中,如果不指定Content-Type(MIME类型),则默认传递的参数就是application/x-www-form-urlencoded类型

1、浏览器的原生form表单

2、提交的数据都按照key1 = val1&key2=val2的方式进行编码,key和val都进行了URL转码)

RequestParam可以接受简单类型的属性,也可以接受对象类型。

实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。

@RequestBody

处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据。

GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。

POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,

SpringMVC通过使用HandlerAdapter(处理适配器) 配置的HttpMessageConverters(消息转换工具)来解析HttpEntity中的数据,然后绑定到相应的bean上。

总结

在GET请求中,不能使用@RequestBody。

在POST请求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,对于参数转化的配置必须统一。

一般情况下,推荐使用@RequestParam注解来接受Http请求参数。

  • 11
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值