• Spring注解


     Spring注解
        1 用于创建对象的注解;
            他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的;
            @Component:
                作用:用于把当前类对象存入spring容器中;
                属性:
                    value:指定bean的id。当我们不写时,它的默认值是当前类名,且首字母改小写。
            @Controller  一般用在表现层;
            @Service  一般用在业务层;
            @Repository  一般用在持久层;
            以上三个注解的作用和属性与Component是一模一样;
            以上三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰明了;
        
        2 用于注入数据的注解
            他们的作用就和在xml配置文件中的bean标签中写一个<property>标签的作用是一样的
            @Autowired:
                作用:自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功
                        如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
                        如果Ioc容器中有多个类型匹配时:
                出现位置:
                    可以是变量上,也可以是方法上
                细节:
                    在使用注解注入时,set方法就不是必须的了。
            @Qualifier:
                作用:在按照类中注入的基础上再按照名称注入。它在给类成员注入时不能单独使用。在给方法参数注入时可以使用
                属性:
                    value:指定注入bean的id。
                ....(@Qualifier("dataSource1") DataSource dataSource){}
            @Resource
                作用:直接按照bean的id注入。它可以独立使用
                属性:
                    name:指定bean的id。
            以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。
            另外,集合类型的注入只能通过XML来实现。
        
            @Value
                作用:注入基本类型和String类型的数据
                属性:
                    value:用于指定数据的值。它可以使用spring中SpEL(也就是spring的el表达式)
                            SpEL的写法:${表达式}
        
        3 用于改变作用范围的
            他们的作用就和在bean标签中使用scope属性实现的功能是一样的
            @Scope
                作用:指定bean的作用范围
                属性:
                    value:指定范围的取值。常用取值:singleton(单例) prototype(多例)
        
        4 和生命周期相关 了解
            他们的作用就和在bean标签中使用init-method和destroy-methode的作用是一样的
            @PreDestroy
                作用:指定销毁方法
            @PostConstruct
                作用:指定初始化方法
        5 用于指定配置的
          @Configuration
              作用:指定当前类是一个配置类
               细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写。
        6 用于指定扫描包的
          @ComponentScan
             作用:用于通过注解指定spring在创建容器时要扫描的包
              属性:
                value:它和basePackages的作用是一样的,都是用于指定创建容器时要扫描的包。
                    我们使用此注解就等同于在xml中的配置:
                    <context:component-scan base-package="com.test"></context:component-scan>
         @Bean
            作用:把当前方法的返回值作为bean对象存入spring的ioc容器中
            属性:
                name:指定bean的id。当不写时,默认值是当前方法的名称
            细节:
                当使用注解配置方法时,如果方法有参数,spring框架会去容器中查找有没有可用的bean对象。
                查找的方式和Autowired注解的作用是一样的,自动按类型注入
        7 导入其他配置类
          @Import
            作用:用于导入其他的配置类
            属性:
                value:指定其他配置类的字节码;
                        当使用Import的注解之后,有Import注解的类就父配置类,而导入的都是子配置类;
        8 用于指定读取配置文件的
          @PropertySource
            作用:指定properties文件的位置
            属性:
                value:指定文件的名称和路径。
                    关键字:classpath,表示类路径下
        9 测试类注解
        使用Junit单元测试:测试当前的配置
        Spring整合junit的配置
            1、导入spring整合junit的jar(坐标)
            2、使用Junit提供的一个注解把原有的main方法替换了,替换成spring提供的
                @Runwith
              @RunWith(SpringJUnit4ClassRunner.class)
            3、告知spring的运行器,spring和ioc创建是基于xml还是注解的,并且说明位置
                @ContextConfiguration
                locations:指定xml文件的位置,加上classpath关键字,表示在类路径下
                classes:指定注解类所在地位置
            @ContextConfiguration(locations="classpath:testspringbean.xml")
    Spring MVC 注解
        映射请求路径
        @RequestMapping(path="") 
        作用:建立请求URL和处理方法之间得对应关系
          1作用在类上,第一级得访问目录
          2作用在方法上,第二季的访问目录
      细节:路径可以不编写/表时应用的根目录开始
          ${pageContext.request.contextPath}也可以省略不写,但是路径上不能写/
       属性:     path: 指定请求的路径的url;     value: value属性和path属性是一样的;
        method: 指定该方法的请求方式
        consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;     produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;     params: 指定限制请求参数的条件;     headers: 发送的请求中必须包含的请求头。 * @requestParam(name="指定参数名")
        作用:把请求中的指定名称的参数传递给控制器中的形参赋值
        属性:
          value:请求参数中的名称
          required:请求参数中是否必须提供此参数,默认值是true,必须提供;

    /**
    * 接收请求
    * @return
    */
    @RequestMapping(path="/hello")
    public String sayHello(@RequestParam(value="username",required=false)String name) {
      System.out.println("aaaa");
      System.out.println(name);
      return "success";
    }

     * @requestBody
        作用:用于获取请求体的内容(注意:get方法不可以)
        属性:
          required:是否必须有请求体,默认是true
        
    /**

    * 接收请求
    * @return
    */
    @RequestMapping(path="/hello")
    public String sayHello(@RequestBody String body) {
      System.out.println("aaaa");
      System.out.println(body);
      return "success";
    }

     * @ResponseBody
        作用:
           1 使用@RequestBody获取请求体数据
           2 @RequestBody注解把json的字符串转换成JavaBean的对象
           3 @ResponseBody注解把JavaBean对象转换成json字符串,直接响应
           4 json字符串和JavaBean对象互相转换的过程中,需要使用jackson的jar包

       @PathVariable注解
          作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
          属性:
            value:指定url中的占位符名称
            Restful风格的URL
            请求路径一样,可以根据不同的请求方式去执行后台的不同方法
          restful风格的URL优点
            结构清晰
            符合标准
            易于理解
            扩展方便

    /**
    * 接收请求
    * @return
    */
    @RequestMapping(path="/hello/{id}")
    public String sayHello(@PathVariable(value="id") String id) {
      System.out.println(id);
      return "success";
    }

    
    

        @RequestHeader注解
          作用:获取指定请求头的值
          属性
            value:请求头的名称

    @RequestMapping(path="/hello")
    public String sayHello(@RequestHeader(value="Accept") String header) {
      System.out.println(header);
      return "success";
    }

        @CookieValue注解
          作用:用于获取指定cookie的名称的值
          属性
            value:cookie的名称

    @RequestMapping(path="/hello")
    public String sayHello(@CookieValue(value="JSESSIONID") String cookieValue) {
      System.out.println(cookieValue);
      return "success";
    }

        @ModelAttribute注解
          作用
            出现在方法上:表示当前方法会在控制器方法执行前先执行。
            出现在参数上:获取指定的数据给参数赋值。
          应用场景
            当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。

    /**
    * 作用在方法,先执行
    * @param name
    * @return
    */
    @ModelAttribute
    public User showUser(String name) {
      System.out.println("showUser执行了...");
      // 模拟从数据库中查询对象
      User user = new User();
      user.setName("哈哈");
      user.setPassword("123");
      user.setMoney(100d);
      return user;
    }
    /**
    * 修改用户的方法
    * @param cookieValue
    * @return
    */
    @RequestMapping(path="/updateUser")
    public String updateUser(User user) {
      System.out.println(user);
      return "success";
    }

    /**
    * 作用在方法,先执行
    * @param name
    * @return
    */
    @ModelAttribute
    public void showUser(String name,Map<String, User> map) {
      System.out.println("showUser执行了...");
      // 模拟从数据库中查询对象
      User user = new User();
      user.setName("哈哈");
      user.setPassword("123");
      user.setMoney(100d);
      map.put("abc", user);
    }

    /**
    * 修改用户的方法
    * @param cookieValue
    * @return
    */
    @RequestMapping(path="/updateUser")
      public String updateUser(@ModelAttribute(value="abc") User user) {
      System.out.println(user);
      return "success";
    }


    @SessionAttributes注解
      作用:用于多次执行控制器方法间的参数共享;
      属性
        value:指定存入属性的名称;

       只能作用在类上;

    @Controller
    @RequestMapping(path="/user")
    @SessionAttributes(value= {"username","password","age"},types=
    {String.class,Integer.class}) // 把数据存入到session域对象中
    public class HelloController {
    /**
    * 向session中存入值
    * @return
    */
    @RequestMapping(path="/save")
    public String save(Model model) {
      System.out.println("向session域中保存数据");
      model.addAttribute("username", "root");
      model.addAttribute("password", "123");
      model.addAttribute("age", 20);
    return "success";
    }
    /**
    * 从session中获取值
    * @return
    */
    @RequestMapping(path="/find")
    public String find(ModelMap modelMap) {
    String username = (String)modelMap.get("username");
    String password = (String)modelMap.get("password");
    Integer age = (Integer)modelMap.get("age");
    System.out.println(username + " : "+password +" : "+age);
    return "success";
    }
    /**
    * 清除值
    * @return
    */
    @RequestMapping(path="/delete")
    public String delete(SessionStatus status) {
    status.setComplete();
    return "success";
    }
    }

  • 相关阅读:
    弱鸡儿长乐爆肝旅Day8
    弱鸡儿终于没爆零Day7
    弱鸡儿长乐爆零旅Day6
    弱鸡儿长乐爆零旅Day5
    弱鸡儿长乐爆零旅Day4
    D1字符串哈希
    Tarjan算法
    弱鸡儿长乐爆零旅Day3
    弱鸡儿长乐爆零旅Day2
    弱鸡儿长乐爆零旅Day1
  • 原文地址:https://www.cnblogs.com/zxh06820/p/12501304.html
Copyright © 2020-2023  润新知