Spring中的各种注释详解

@Controller是什么

@Controller表示在tomcat启动的时候,把这个类作为一个控制器加载到Spring的Bean工厂,如果不加,就是一个普通的类,和Spring没有半毛钱关系。

    <!-- 开启mvc 的注解 -->
    <context:annotation-config></context:annotation-config>
    <mvc:annotation-driven></mvc:annotation-driven>
    <!-- 就是在核心的配置文件 中 指明 那个 普通的类 为 局部 控制器 -->
    <context:component-scan base-package="com.cyl.controller"></context:component-scan>

        其中,base-package表示会扫描com.cyl.controller目录下所有的包,一旦发现有个类上面加了类似于@Controller的注解,在容器启动的时候系统就会把它加载到Spring的Bean工厂,并且对其实例化。

       这也是为什么,我们只是写了Controller,但是从来没有在一个地方new这个Controller的原因,因为在Web容器启动的时候,这个Controller已经被Spring加载到自己的Bean工厂里面去了。

       这也就是所谓的Spring扫包机制。@Controller就是一个注解,当tomcat启动,我们会看到一些JAVA类挥舞着印有@Controller的旗子大喊:" Hey,SpringMVC,I'm  here,please take me to your bean factory!"

      

     @Controller返回的应该是页面或者是请求,具体视当前业务而定。

     @Controller修饰的类会将return的字符串配合视图解析器InternalResourceViewResolver添加上前缀和后缀。跳转到对应的html页面。

     @Controller和@ResponseBody配合作用和@RestController一样

@RestController是什么

 @RestController修饰的类会将 return后面的内容字符串的形式返回到@Requestmapping的页面

 @RestController 这个注解,返回的是data,就不能返回 jsp,html 页面,视图解析器(InternalResourceViewResolver)无法解析 jsp,html 页面。

@RequestMapping是什么

     RequestMapping就是一个映射路径。你也可以理解为是存在电脑上文件的文件路径。可以放在类上也可以放在类的具体方法上。

     如果我在同一个Controller里面设置两个相同的RequestMapping,编译不报错,但是在启动之后请求会报错。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'blogController' bean method

    一个B/S架构的web项目,就是一个类似于命令行一样的应用程序,我们唯有通过url,也就是路径去获得我们想要的资源和服务。

@ResponseBody是什么

@ResponseBody这个注解,它的意思很简单,就是说明这个方法返回的东西会通过IO流的方式写入到浏览器。

@RequestMapping("/testResponseBody")
@ResponseBody
public String testResponseBody(HttpServletRequest request){
    return "<h1 style='color:lightGreen'>Hello Web!</h1>";
}

    1494897809137032549.png

@Autowired是什么

@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;

public class TestServiceImpl {
  // 下面两种@Autowired只要使用一种即可
  @Autowired
  private UserDao userDao; // 用于字段上
  
  @Autowired
  public void setUserDao(UserDao userDao) { // 用于属性的方法上
    this.userDao = userDao;
  }
}

在容器的启动过程中,会初始化很多bean,这也是spring的核心之一(IOC)。但是在注入的过程中,扫描到公共方法中要注入的bean,并未找到,强行注入就会注入失败。我们又不能单独的去除改方法,所以我们采取的思想就是有bean就注入,没有就不注入。解决办法就是@Autowired(required=false)。@Autowired是spring的注解,是spring2.5版本引入的,Autowired默认是type进行注入。如果涉及到type无法辨别注入对象时,那需要依赖@Qualifier或@Primary注解一起来修饰。

这里写图片描述

public class TestServiceImpl {
  @Autowired
  @Qualifier("userDao")
  private UserDao userDao; 
}

@Resource是什么

        @Resource是Java自己的注解,是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。@Resource有两个属性是比较重要的,分是name和type;Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

public class TestServiceImpl {
  // 下面两种@Resource只要使用一种即可
  @Resource(name="userDao")
  private UserDao userDao; // 用于字段上
  
  @Resource(name="userDao")
  public void setUserDao(UserDao userDao) { // 用于属性的setter方法上
    this.userDao = userDao;
  }
}

@PostMapping@GetMapping@PutMapping@DeleteMapping是什么

Spring MVC新特性提供了对Restful风格的支持

@GetMapping,处理get请求
@PostMapping,处理post请求
@PutMapping,处理put请求
@DeleteMapping,处理delete请求

@PostMapping("/updateApp") 等价于 @RequestMapping(value = "/updateApp",method = RequestMethod.POST)

@RequestParam是什么

@RequestParam放在问号后面,无论GET还是POST都能取到值;当POST放在body里格式为form-data也能取到值,其他(raw等)取不到,而为GET放到body都取不到值

@GetMapping("/get")
Response getNews(@RequestParam("id") Integer id) {
    try {
        NewsClass newsClass = newsService.show(id);
        return Response.ok(newsClass);
    } catch (Exception e) {
        return Response.error(e.getMessage());
    }
}

@RequestBody是什么

对于@RequestBody无论是POST还是GET请求参数只能放在请求体里面,当请求方式为GET(@RequestBody)时,请求参数放在请求体里,服务端也能拿到参数

@PostMapping("/delete")
Response delete(@RequestBody Integer[] ids) {
    try {
        newsService.delete(ids);
        return Response.ok();
    } catch (Exception e) {
        return Response.error(e.getMessage());
    }
}

 

 

 

 

原文链接

https://www.cnblogs.com/skyblue-li/p/6861036.html

https://blog.csdn.net/lbh_paopao/article/details/113877754

https://www.jb51.net/article/169300.htm

https://blog.csdn.net/u013518407/article/details/104823554

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值