当前位置: 首页 > news >正文

SpringMVC中的各注解类理解

目录

一、概念

二、springmvc注解详解

(一)控制层注解

1.@Controller 

2.@RequestMapping

3.@ResponseBody

(二)配置类(bean类)注解

4.@configuration

5.@Bean


一、概念

在学习springmvc的时候,很多时候对于代码看得云里雾里,不理解这里为什么要这样写,首先就要先理解这些注解的使用,才能知道这个类,这个方法在干嘛。要干嘛?

二、springmvc注解详解

(一)控制层注解

1.@Controller 

这个注解是是Spring框架提供的注解。用于标记在一个类上面

关于调用:

这个类代表控制器类(控制层/表现层)

这里控制层里面的每个方法,都可以去调用@Service标识的类(业务逻辑层)
@Service标识的类中的方法又可以继续调用@Resposity标识的接口实现类(Dao层/持久层)。 

搭配其他注解使用:

@Controller定义一个控制器类,
@RequestMapping给出外界访问方法的路径,或者说触发路径 ,触发条件。
@ResponseBody标记Controller类中的方法。把return的结果变成JSON对象返回。

补充知识:

 @Controller用于标记在一个类上,使用它标记的类就是一个Controller类,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了 @RequestMapping 注解。
@Controller只是定义了一个控制器类,而使用 @RequestMapping 注解的方法才是处理请求的处理器。

2.@RequestMapping

这个注解用在@Controller定义一个控制器类的方法上面。

用于将任意HTTP 请求映射到控制器方法上。能够处理 HTTP 请求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。默认请求是 HTTP GET 类型的。

补充知识

在使用@RequestMapping()注解的前提下,使用@ResponseBody()注解,则有返回值会使用@ResponseBody()注解进行转换并返回前台页面,不会执行跳转操作。

总结:只用@RequestMapping这个并且有返回值会解析为跳转页面,再加上@ResponseBody后会解析json数据

3.@ResponseBody

这个@ResponseBody注解是作用在方法上的 。作用是将java对象转为json格式的数据。

补充知识

(1)在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据。

(2)将返回值转换成JSON,如果返回值是String或者其他基本数据类型则不满足key-value形式,不能转换成json类型,则返回字符串。

总结:只用@RequestMapping这个并且有返回值会解析为跳转页面,再加上@ResponseBody后会解析json数据

(二)配置类(bean类)注解

4.@configuration

这个注解是一个类级别的注解。@Configuration类通过带@Bean注释在方法上声明bean。

你想要定义一个配置类并交给spring管理的时候你就可以在类上面加这个注解,并配合@Bean注解把对象交个spring去管理。(这个类的功能等同于一个bean xml配置文件)

配置类使用要求

(1)不能是final类

(2)不能在方法中声明,不能是private类

(3)任何嵌套类都必须声明static

总结

@Configuration注解类下的所有带着@Bean的方法都会被动态代理,因此调用该方法返回的都是同一个实例。 

5.@Bean

这个注解是一个方法级别的注解。就是告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在IOC容器中

搭配其他注解使用:主要用在@Configuration注解的类里面的方法上面,也可以用在@Component注解的类里面。添加的bean的id为方法名。

 

http://www.lryc.cn/news/19027.html

相关文章:

  • DNF搭建服务器服务端搭建教程
  • 【论文简述】Learning Optical Flow with Adaptive Graph Reasoning(AAAI 2022)
  • qt QCustomPlot学习
  • 【HDFS】FsDatasetImpl系列文章(七):finalizeBlock方法和unfinalizeBlock方法
  • 测试部门来了个99年的卷王之王,老油条感叹真干不过,但是...
  • CSS 网页动画【快速掌握知识点】
  • 电脑技巧:分享六个非常实用的资源网站
  • 【Java基础 下】 027 -- 异常、File、综合案例
  • 教师管理系统的设计与实现
  • 【Java】线程使用方式
  • 零基础想转行学习Python,该如何学习,有学习路线分享吗?(2023年给初学者的建议)
  • IDEA Maven install Failed to execute goal org.apache.maven.plugins异常处理
  • TensorFlow-Keras - FM、WideAndDeep、DeepFM、DeepFwFM、DeepFmFM 理论与实战
  • Java浅析电信数据采集
  • 那些开发中需要遵守的产研开发规范
  • 一文深入分析-内核并发消杀器(KCSAN)
  • Java学习-IO流-字符缓冲流
  • Java的一维数组遍历、求最值、冒泡排序
  • Free for photo container detection, container damage detect PaaS
  • 【golang】【源代码】reflect.DeepEqual(x,y)函数
  • Python实现定时执行脚本(4)
  • 量子力学(4) 全同粒子
  • 13、Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
  • C++基础入门丨8. 结构体——还需要知道这些
  • 算法第十六期——动态规划(DP)之线性DP
  • 智慧新零售网络解决方案,助力新零售企业数智化转型
  • Go语言规范中的可赋值
  • 外盘国际期货招商:原油市场热点话题
  • [蓝桥杯 2018 省 A] 付账问题 贪心题
  • 微机原理复习(周五),计算机组成原理图