• Sring中常用注解归纳


    Spring常用注解

    用于创建对象的注解

           他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的
           Component:
               作用:用于把当前类对象存入spring容器中
               属性:
                   value:用于指定bean的id。当我们不写时,它的默认值是当前类名,且首字母改小写。
          Controller:一般用在表现层
          Service:一般用在业务层
          Repository:一般用在持久层
          以上三个注解他们的作用和属性与Component是一模一样。
          他们三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰
     
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    @Repository 与 @Mapper的区别,指路该链接博主

    用于注入数据的注解

    他们的作用就和在xml配置文件中的bean标签中写一个<property>标签的作用是一样的
          Autowired:
              作用:自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功
                    如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
                    如果Ioc容器中有多个类型匹配时:
              出现位置:
                  可以是变量上,也可以是方法上
              细节:
                  在使用注解注入时,set方法就不是必须的了。
          Qualifier:
              作用:在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用。但是在给方法参数注入时可以 
              属性:
                  value:用于指定注入bean的id。
          Resource
              作用:直接按照bean的id注入。它可以独立使用
              属性:
                  name:用于指定bean的id。
          以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。
          另外,集合类型的注入只能通过XML来实现。
          Value
              作用:用于注入基本类型和String类型的数据
              属性:
                  value:用于指定数据的值。它可以使用spring中SpEL(也就是spring的el表达式)
                          SpEL的写法:${表达式}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    用于改变作用范围的注解

          他们的作用就和在bean标签中使用scope属性实现的功能是一样的
          Scope
              作用:用于指定bean的作用范围
              属性:
                  value:指定范围的取值。常用取值:singleton prototype
    
     和生命周期相关 了解
          他们的作用就和在bean标签中使用init-method和destroy-methode的作用是一样的
          PreDestroy
              作用:用于指定销毁方法
          PostConstruct
              作用:用于指定初始化方法
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    package com.itheima.service.impl;
    
    import com.itheima.dao.IAccountDao;
    import com.itheima.service.IAccountService;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    import javax.annotation.Resource;
    //@Component
    @Service("accountService")
    //@Scope("prototype")
    public class AccountServiceImpl implements IAccountService {
    
    //    @Autowired
    //    @Qualifier("accountDao1")
        @Resource(name = "accountDao2")
        private IAccountDao accountDao = null;
    
        @PostConstruct
        public void  init(){
            System.out.println("初始化方法执行了");
        }
    
        @PreDestroy
        public void  destroy(){
            System.out.println("销毁方法执行了");
        }
    
        public void  saveAccount(){
            accountDao.saveAccount();
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    SpringMVC常用注解

    RequestParam

    • 作用:把请求中指定名称的参数给控制器中的形参赋值。
    • 属性:
      value:请求参数中的名称。
      required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错。
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Titletitle>
    head>
    <body>
        <a href="anno/testRequestParam?name=哈哈">RequestParama>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    @Controller
    @RequestMapping("/anno")
     
    public class AnnoController {
    
        @RequestMapping("/testRequestParam")
        //将name中的值赋值给username这个属性,而name中的值和anno.jsp中的RequestParam中的name这个变量名保持一致
        public String testRequestParam(@RequestParam(name="name") String username){
            System.out.println("执行了...");
            System.out.println(username);
            return "success";
        }
    }
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    RequestBody

    • 作用:用于获取请求体内容。直接使用得到是 key=value&key=value…结构的数据。get 请求方式不适用。
    • 属性:
      required:是否必须有请求体。默认值是:true。当取值为 true 时,get 请求方式会报错。如果取值为 false,get 请求得到是 null。
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Titletitle>
    head>
    <body>
        <form action="anno/testRequestBody" method="post">
            用户姓名:<input type="text" name="username" /><br/>
            用户年龄:<input type="text" name="age" /><br/>
            <input type="submit" value="提交" />
        form>
    
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    @Controller
    @RequestMapping("/anno")
     
    public class AnnoController {
    
        /**
         * 获取到请求体的内容
         * @return
         */
        @RequestMapping("/testRequestBody")
        public String testRequestBody(@RequestBody String body){
            System.out.println("执行了...");
            System.out.println(body);
            return "success";
        }
     
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    @RequestBody注解的作用是将前端传递的参数(请求体中的数据)自动封装到后端的javabean对象当中。
    @ResponseBody的作用其实是将java对象转为json格式的数据。

    PathVaribale

    • 作用:用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},这个{id}就是 url 占位符。url 支持占位符是 spring3.0 之后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志。
    • 属性:
      value:用于指定 url 中占位符名称。
      required:是否必须提供占位符。
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Titletitle>
    head>
    <body>
       <a href="anno/testPathVariable/10">testPathVariablea>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    @Controller
    @RequestMapping("/anno")
    public class AnnoController {
    
      /**
         * PathVariable注解
         * @return
         */
        @RequestMapping(value="/testPathVariable/{sid}")
        public String testPathVariable(@PathVariable(name="sid") String id){
            System.out.println("执行了...");
            System.out.println(id);
            return "success";
        }
     
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    RequestHeader

    • 作用:用于获取请求消息头。
    • 属性:
      value:提供消息头名称
      required:是否必须有此消息头
      注:在实际开发中一般不怎么用。
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Titletitle>
    head>
    <body>
       <a href="anno/testRequestHeader">RequestHeadera>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    @Controller
    @RequestMapping("/anno")
     
    public class AnnoController {
    
      /**
         * 获取请求头的值
         * @param header
         * @return
         */
        @RequestMapping(value="/testRequestHeader")
        public String testRequestHeader(@RequestHeader(value="Accept") String header 
            System.out.println("执行了...");
            System.out.println(header);
            return "success";
             
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    CookieValue

    • 作用:用于把指定 cookie 名称的值传入控制器方法参数。
    • 属性:
      value:指定 cookie 的名称。
      required:是否必须有此 cookie。
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Titletitle>
    head>
    <body>
      <a href="anno/testCookieValue">CookieValuea>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    @Controller
    @RequestMapping("/anno")
     
    public class AnnoController {
    
     /**
         * 获取Cookie的值
         * @return
         */
        @RequestMapping(value="/testCookieValue")
        public String testCookieValue(@CookieValue(value="JSESSIONID") String cookieValue){
            System.out.println("执行了...");
            System.out.println(cookieValue);
            return "success";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    ModelAttribute

    • 作用:
      该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数。
      出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。
      出现在参数上,获取指定的数据给参数赋值。
    • 属性:
      value:用于获取数据的 key。key 可以是 POJO 的属性名称,也可以是 map 结构的 key。
    • 应用场景:
      当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
      例如:
      我们在编辑一个用户时,用户有一个创建信息字段,该字段的值是不允许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把该字段内容置为 null,此时就可以使用此注解解决问题。
      有返回值类型
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Titletitle>
    head>
    <body>
      <form action="anno/testModelAttribute" method="post">
            用户姓名:<input type="text" name="uname" /><br/>
            用户年龄:<input type="text" name="age" /><br/>
            <input type="submit" value="提交" />
        form>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    package cn.itcast.controller;
    
    import cn.itcast.domain.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.bind.support.SessionStatus;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.Date;
    import java.util.Map;
    
    /**
     * 常用的注解
     */
    @Controller
    @RequestMapping("/anno")
     
    public class AnnoController {
    
     /**
         * ModelAttribute注解
         * @return
         */
        @RequestMapping(value="/testModelAttribute")
        public String testModelAttribute( User user){
            System.out.println("testModelAttribute执行了...");
            System.out.println(user);
            return "success";
        }
        /**
         * 该方法会先执行
         */
    
        @ModelAttribute
        public User showUser(String uname){
            System.out.println("showUser执行了...");
            // 通过用户查询数据库(模拟)
            User user = new User();
            user.setUname(uname);
            user.setAge(20);
            user.setDate(new Date());
            return user;
        }
        
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Titletitle>
    head>
    <body>
      <form action="anno/testModelAttribute" method="post">
            用户姓名:<input type="text" name="uname" /><br/>
            用户年龄:<input type="text" name="age" /><br/>
            <input type="submit" value="提交" />
        form>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    @Controller
    @RequestMapping("/anno")
     
    public class AnnoController {
    
       /**
         * ModelAttribute注解
         * @return
         */
        @RequestMapping(value="/testModelAttribute")
        public String testModelAttribute(@ModelAttribute("abc") User user){
            System.out.println("testModelAttribute执行了...");
            System.out.println(user);
            return "success";
        }
    
        @ModelAttribute
        public void showUser(String uname, Map<String,User> map){
            System.out.println("showUser执行了...");
            // 通过用户查询数据库(模拟)
            User user = new User();
            user.setUname(uname);
            user.setAge(20);
            user.setDate(new Date());
            map.put("abc",user);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    SessionAttribute

    1、该注解只能应用在类中;
    2、该注解用于将Map、ModelMap、Model或ModelAndView中的数据暂存到HttpSession中以使其可以在多个请求之间共用数据。

     <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Titletitle>
    head>
    <body>
       <a href="anno/testSessionAttributes">testSessionAttributesa>
        <a href="anno/getSessionAttributes">getSessionAttributesa>
        <a href="anno/delSessionAttributes">delSessionAttributesa>
    html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    @Controller
    @RequestMapping("/anno")
    @SessionAttributes(value={"msg"})   // 把msg=美美存入到session域对中
    public class AnnoController {
    
        /**
         * SessionAttributes的注解
         * @return
         */
        @RequestMapping(value="/testSessionAttributes")
        public String testSessionAttributes(Model model){
            System.out.println("testSessionAttributes...");
            // 底层会存储到request域对象中
            model.addAttribute("msg","美美"); 
            return "success";
        }
    
        /**
         * 获取值
         * @param modelMap
         * @return
         */
        @RequestMapping(value="/getSessionAttributes")
        public String getSessionAttributes(ModelMap modelMap){
            System.out.println("getSessionAttributes...");
            #获取requset中的值(该值是可以共享的)
            String msg = (String) modelMap.get("msg");
            System.out.println(msg);
            return "success";
        }
    
        /**
         * 清除
         * @param status
         * @return
         */
        @RequestMapping(value="/delSessionAttributes")
        public String delSessionAttributes(SessionStatus status){
            System.out.println("getSessionAttributes...");
            status.setComplete();
            return "success";
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
     
    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
        <title>Titletitle>
    head>
    <body>
    
        <h3>入门成功h3>
    
        ${ msg }
    
        ${sessionScope}
    
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    数字图像处理(十一)白平衡算法
    Istio网关流量转发
    MySQL备份与恢复
    深造分布式 打败面试官 招式三 直捣黄龙
    BN踩坑记--谈一下Batch Normalization的优缺点和适用场景
    APISpace 验证码短信API接口案例代码
    北邮 数字系统设计 14 Floating Point Number
    音视频编解码技术学习笔记
    MySQL-事务的概念
    C#、C++、Java、Python 选择哪个好?
  • 原文地址:https://blog.csdn.net/Apikaqiu/article/details/126178959