Spring框架常用注解

在这里插入图片描述

Spring常用注解

在这里插入图片描述


@Controller

@Controller 用来响应页面,表示当前的类为控制器。
在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。
@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。那么要如何做Spring 才能认识它呢?这个时候就需要我们把这个控制器类交给Spring 来管理。


@RestController

Spring4之后新加入的注解,原来返回json需要@ResponseBody和@Controller配合,表明当前类是控制器且返回的是一组数据,不是页面。@RestController是@ResponseBody和@Controller的组合注解,推荐直接使用@RestController注解来处理http请求。

@RestController
public class HelloController {

    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(){
        return "hello";
    }
}
@Controller
@ResponseBody
public class HelloController {

    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(){
        return "hello";
    }
}

@Autowired

@Autowired的作用是将其他的接口引入,类似于之前的类的初始化等,用这个注解,类中或接口的方法就可以直接调用了。
@Autowired顾名思义,就是自动装配,其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property。当然,getter看个人需求,如果私有属性需要对外提供的话,应当予以保留。
@Resource的作用相当于@Autowired


@ResponseBody

作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。当返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)时使用。


@RequestMapping (配置url映射)

@RequestMapping如果没有指定请求方式,将接收Get,Post,Head,Options等所有的请求方式。
@RequestMapping此注解即可以作用在控制器的某个方法上,也可以作用在此控制器类上。当前台界面调用Controller处理数据时候告诉控制器怎么操作有3种情形:
1.当控制器在类级别上添加@RequestMapping注解时,这个注解会应用到控制器的所有处理器方法上。处理器方法上的@RequestMapping注解会对类级别上的@RequestMapping的声明进行补充。
2.@RequestMapping作用在处理器方法上。
3.@RequestMapping同时作用在类级别处理器方法上。
在这里插入图片描述
所响应的url=localhost:8080/updata_setting/updata


@RequestMapping注解属性

作用:简化常用的HTTP方法的映射,并更好地表达被注解方法的语义。
RequestMapping注解有六个属性:
1、 value, method;

value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

method: 指定请求的method类型, GET、POST、PUT、DELETE等;常用: GET、POST
组合注解:

  • @GetMapping @RequestMapping(method = RequestMethod.GET)的简写
    作用:对应查询,表明是一个查询URL映射
  • @PostMapping @RequestMapping(method =RequestMethod.POST)的简写
    作用:对应增加,表明是一个增加URL映射
  • @PutMapping@RequestMapping(method = RequestMethod.PUT)的简写
    作用:对应更新,表明是一个更新URL映射
  • @DeleteMapping @RequestMapping(method = RequestMethod.DELETE)的简写
    作用:对应删除,表明是一个删除URL映射

2、consumes,produces

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

3、params,headers

params: 指定request中必须包含某些参数值是,才让该方法处理。

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。


@PathVaribale

通过@PathVariable注解来获取URL中的参数时的前提条件是我们知道url的格式时怎么样的。只有知道url的格式,我们才能在指定的方法上通过相同的格式获取相应位置的参数值。
1.获取url中的单个参数(如id)

@RestController
public class HelloController {

    @RequestMapping(value="/hello/{id}",method= RequestMethod.GET)
    public String sayHello(@PathVariable("id") Integer id){
        return "id:"+id;
    }
}

2.获取url有多个参数

@RestController
public class HelloController {

    @RequestMapping(value="/hello/{id}/{name}",method= RequestMethod.GET)
    public String sayHello(@PathVariable("id") Integer id,@PathVariable("name") String name){
        return "id:"+id+" name:"+name;
    }
}
@RequestParam

作用:获取请求参数的值
@RequestParam注解给允许用户不输入参数时,使用默认值;
在这里插入图片描述

@RequestBody

如果传输的是单层json对象,我们后台可以直接用 @RequestParam接收。如果传输的是多层嵌套json对象,这个时候会就会出现数据丢失问题,@ResponseBody很好的解决了这个问题,它会把前台传输过来的json转化为后台对应的对象;
@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。(易出错)然而在ajax请求往往传的都是Json对象,用JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: “json”,contentType:“application/json” 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List。

var vm = new Vue({
    el: '#updata',
    data: {
        updata_setting: {}
    },
    methods: {
        Save:function(ev){
            var url = "../updata_setting/updata";
            $.ajax({
                type: "POST",
                url: url,
                data: JSON.stringify(vm.updata_setting),
                success: function(r){
                        alert('操作成功!');
                    }
            });
        }
    }
});

@Service

用于标注业务层组件,位于service实现层:
形如:@Service(“xxxService”)
在这里插入图片描述


@Override

@Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处:
1、可以当注释用,方便阅读。
2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。比如你如果没写@Override而你下面的方法名又写错了,这时你的编译器是可以编译通过的(它以为这个方法是你的子类中自己增加的方法)。


@Repository

@Repository用于标注数据访问组件,即dao层
在这里插入图片描述
如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用上述注解对分层中的类进行注释。@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。


END

  • 21
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

*猪耳朵*

听我说谢谢你,因为有你。。。。

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

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

打赏作者

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

抵扣说明:

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

余额充值