首页 > 其他分享 >基本注解详解@Component,@RestController,@Autowired

基本注解详解@Component,@RestController,@Autowired

时间:2022-11-01 17:03:33浏览次数:81  
标签:RestController RequestMapping Autowired spring Component bean Controller 注解

基本注解详解

1. @Component注解的用法

注解本质上就是一个类,开发中我们可以使用注解取代xml配置文件。
@component是spring中的一个注解,它的作用就是实现bean的注入。

在Java的web开发中,提供3个@Component注解衍生注解(功能与@component一样)分别是:

​ 1、@Controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层。

​ 2、@Service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理

​ 3、@Repository(实现dao访问) 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件

而@Component泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

2. @RestController注解详解

在Spring中@RestController的作用等同于@Controller + @ResponseBody。所以我们先学习这连个注解

2.1 @Controller注解

在一个类上添加@Controller注解,表明了这个类是一个控制器类。但想要让这个类成为一个处理请求的处理器光有@Controller注解是不够的,他还需要进一步修炼才能成为一个处理器。

  1. 在spring容器中创建该类的实例。创建实例的方式有两种:

    <bean class="test.controller.MyController" />
    

    上述这种方式是在spring容器中注入单个bean,当项目比较大,控制器类比较多时,用这种方式向Spring容器中注入bean非常的让人苦恼,索性有第二种方式。

    <context:component-scan base-scan="test.controller" />
    

    这种方式会扫描指定包中的所有类,并生成相应的bean注入到spring容器中。使用这种方式当然能够极大提高我们的开发效率,但是有时候我们不想某一类型的类注入到spring容器中。

    这个时候第二种方式也可以解决。

    <context:component-scan base-package="test" >
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    </context:component-scan>
    123
    

    上述代码表示扫描test包中除有@Service注解之外的类。

2.将@Controller注解的类注入Spring容器中,只是该类成为处理器的第一步,想要修炼大成,还需要在该类中添加注解@RequestMapping。

@RequestMapping注解是用来映射请求的,即指明处理器可以处理哪些URL请求,该注解既可以用在类上,也可以用在方法上。

当使用@RequestMapping标记控制器类时,方法的请求地址是相对类的请求地址而言的;当没有使用@RequestMapping标记类时,方法的请求地址是绝对路径。

@RequestMapping的地址可以是uri变量,并且通过@PathVariable注解获取作为方法的参数。也可以是通配符来筛选请求地址。具体的使用方法不是本次的重点,有兴趣的可以看

https://www.cnblogs.com/xiepeixing/p/4243288.html

@Controller
@RequestMapping("/user")
public class UserController{
	@RequestMapping("/users")
    public String users() {
          return "users";
    }
}

此时请求users方法的url路径就是:…/user/users。

可以看到上面users方法的返回值是字符串类型的,这个就是处理器在处理完任务后将要跳转的页面。如果想要方法直接返回结果,而不是跳转页面,这就要用到@ResponseBody注解了。

2.2@ResponseBody注解

@ResponseBody表示方法的返回值直接以指定的格式写入Http response body中,而不是解析为跳转路径。

格式的转换是通过HttpMessageConverter中的方法实现的,因为它是一个接口,因此由其实现类完成转换。

如果要求方法返回的是json格式数据,而不是跳转页面,可以直接在类上标注@RestController,而不用在每个方法中标注@ResponseBody,简化了开发过程。

3. @Autowired注解

首先了解一下IOC操作Bean管理,bean管理是指(1)spring创建对象 (2)spring注入属性。当我们在将一个类上标注@Service或者@Controller或@Component或@Repository注解之后,spring的组件扫描就会自动发现它,并且会将其初始化为spring应用上下文中的bean。 当需要使用这个bean的时候,例如加上@Autowired注解的时候,这个bean就会被创建。而且初始化是根据无参构造函数。先看代码来体会一下这个注解的作用,测试代码如下:(@Data注解是由Lombok库提供的,会生成getter、setter以及equals()、hashCode()、toString()等方法)

标签:RestController,RequestMapping,Autowired,spring,Component,bean,Controller,注解
From: https://www.cnblogs.com/atao-BigData/p/16848307.html

相关文章

  • unplugin-vue-components 在 vite 中的使用和配置
    unplugin-vue-components是由vue官方人员开发的一款自动引入插件,可以省去比如UI库的大量import语句。安装:npmiunplugin-vue-components-D配置:vite.confi......
  • Spring源码-context:component-scan解析
    调用AbstractApplicationContext.refresh()刷新容器,会调用obtainFreshBeanFactory()获取ConfigurableListableBeanFactory。会去调用loadBeanDefinitions()方法解析xml文件......
  • Vue报错:component has been registered but not used
    原因:​​eslint​​代码检查到你注册了组件但没有使用,然后就报错了。比如代码:比如​​Vue​​​中注册了​​File​​组件,而实际上却没有使用到(直接取消注册为好): .......
  • 漫谈Entity-Component-System
    原文链接简介对于很多人来说,ECS只是一个可以提升性能的架构,但是我觉得ECS更强大的地方在于可以降低代码复杂度。在游戏项目开发的过程中,一般会使用OOP的设计方式让GameO......
  • Vue的Component name报错
    问题描述:Componentname“xxxxx“shouldalwaysbemulti-word.eslintvue解决方案:在项目目录中找到.eslintrc.js文件,rules中添加一行"vue/multi-word-compon......
  • @RestController 指定主路径无效踩坑
    指定路径时写成了@RestController("user"),测试接口的时候发现无效.查看源码关于value的说明:这仅仅是建议值,实际应该使用@RequestMapping("/user")指定.......
  • [Vue warn]: Method “components“ has type “object“ in the component definitio
    [Vuewarn]:Method“components”hastype“object”inthecomponentdefinition.Didyoureferencethe报错如下:仔细检查代码发现:components写到methods方法里面去......
  • 7.Bean的自动装配(Bean Autowired)
    7.Bean的自动装配(BeanAutowired)自动装配是Spring满足bean依赖的一种方式Spring会在上下文中自动寻找,并自动给bean装配属性!在spring中有三种装配的方式1、在xml中显......
  • 选择Visual Components软件的五大理由
    1、更好的性能开发视觉组件是为了充分利用64位Windows环境。这意味着更好的图形、更快的加载时间和更流畅的用户体验。导航大布局是流动的。内存管理不断优化,以提高仿......
  • 解决vue报错 Failed to mount component: template or render function not defined.
    今天npmrundev的时候,有个页面报错,提示[Vuewarn]:Failedtomountcomponent:templateorrenderfunctionnotdefined.昨天还好好的,今天就报错了,也没改啥。经过查资......