Spring mvc
2019-07-30 本文已影响0人
好大一只鹏
1.@service,@Resource,@Component,@Repository,@Autowired的应用
@Component------------------------泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。(Component-------成分; 组分; 零件)
@Repository------------------------(注解类作为DAO对象(数据访问对象,Data Access Objects),这些类可以直接对数据库进行操作 )
@Autowired-----------------------(自动绑定)
@Resource-----------------------
@Service----------------------------用于标注业务层组件(我们通常定义的业务处理层就用这个)
@Controller-------------------------用于标注控制层组件(如struts中的action)
这几个注解的作用相同:都是为实现所在类(即组件)的bean的转化,然后可以在容器中调用。然后从名字上的作用就是可以明确各个层次和层次的作用。
那么什么时候用@resource,@Autowaired,当需要在某个类中定义一个属性,并且该属性是一个已存在的bean,要为该属性赋值或注入时在该属性上一行使用@Resource(name="xxx"),或者@Autowired(本质上一样的只是方式不一样),相当于为该属性注入一个名称为xxx的bean。
@Autowired 与@Resource的区别:
1.@Autowired与@Resource都可以用来装配bean.都可以写在字段上,或写在setter方法上。
2.@Autowired默认按类型装配(这个注解是属业spring的也就是ByType),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false),如果我们想使用名称装配
3.@Resource(这个注解属于J2EE的),默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
@RequestBody ------------------------------注解@RequestBody接收的参数是来自requestBody中,即请求体
@ResponseBody
@RequestMapping(value = "/addUser", method = RequestMethod.POST)
public String addUser(@RequestBody User user) {
return "";
例如这个例子,接受一个User类的请求json数据
@RequestParam ------------------------------------- 注解@RequestParam接收的参数是来自requestHeader中,即请求头。
@GetMapping(value = "/getNormalCount")
@ResponseBody
public User getNormalCount(@RequestParam(required = true) String userName){
return mSignIn.normalCount(userName);
}
@PathVariable -------------------------------注解使用@PathVariable接收参数,参数值需要在url进行占位,前端传参的URL:
@GetMapping(value = "/getNormalCount/{userName}")
@ResponseBody
public User getNormalCount(@PathVariable String userName){
return mSignIn.normalCount(userName);
}