zoukankan      html  css  js  c++  java
  • SpringMVC 注解配置

      

    使用注解配置spring  mvc

    (1)spring mvc的配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    
        <!--配置包扫描-->
        <context:component-scan base-package="com.chy.controller" />
    
        <!-- 配置注解的HandlerMapping-->
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
    
        <!--配置注解的HandlerAdapter-->
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
    
        <!--配置视图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--前缀-->
            <property name="prefix" value="/WEB-INF/jsp/" />
            <!--后缀-->
            <property name="suffix" value=".jsp" />
        </bean>
        
    </beans>

    上面我们手动配置了HandlerMapping、HandlerAdpater,很麻烦。可以使用注解驱动:

    <mvc:annotation-driven />

    会自动注册HandlerMapping、HandlerAdapter,无需我们手动配置。

    (2)controller

    //在controller上标注@Controller
    @org.springframework.stereotype.Controller
    public class UserController{
    
        //在业务方法上标注@RequestMapping
        @RequestMapping("/userController")
        public ModelAndView handle(){
            ModelAndView mav = new ModelAndView("user_info");
            User user = new User();
            user.setUsername("chy");
            user.setPassword("abcd");
            mav.addObject("user", user);
            return mav;
        }
    
    }
    • controller不必实现接口,只需要在controller上标注@Controller,无需在xml中配置controller的<bean>

      (使用xml配置需要在xml中配置此controller的<bean>,麻烦且xml文件冗杂)

    • controller中可以有多个业务方法

      (使用xml配置时controller中只能有1个业务方法,这很不方便,比如UserController,要有saveUser、updateUser、queryUser等多个方法)

    • 业务方法的参数类型、返回值类型可以是任意的

      (使用xml配置时参数类型、返回值都是固定的,ajax查询数据、访问静态页面,都需要返回ModelAndView,没有必要)

    一般都是使用注来配置。


    @RequestMapping   配置业务方法

    (1)value指定此业务方法对应(映射)的url

    @RequestMapping(value = "/userController")
    //只有value一个属性时可简写
    @RequestMapping("/userController")  
    
    //可以不要开头的斜杠
    @RequestMapping(value = "userController")
    @RequestMapping("userController")

    以上4种写法等价,红色标示的写法最常用。

    访问路径都是:

    http://localhost:8080/springmvc_war_exploded/userController
    
    //也可以在末尾加上.do
    http://localhost:8080/springmvc_war_exploded/userController.do

    (3)method    指定请求方式

        @RequestMapping(value = "/userController",method = RequestMethod.GET)
        @RequestMapping(value = "/userController",method = RequestMethod.POST)

    只有请求地址符合,且请求方式是GET|POST时,才使用此方法处理业务。

    以上2个注解分别等价于:

        @GetMapping(value = "/userController")
        @PostMapping(value = "/userController")

    (4)url映射的拼接

    有时候controller中有多个业务方法:

    @org.springframework.stereotype.Controllerpublic class UserController{
        
        @RequestMapping("/userController/saveUser")
        public void saveUser(){
            //......
        } 
        
        @RequestMapping("/userController/deleteUser")
        public void deleteUser(){
            //......
        }
        
        @RequestMapping("/userController/updateUser")
        public void updateUser(User user){
            //......
        }
        
        @RequestMapping("/userController/queryUser")
        public User queryUser(){
            //......
        }
        
    }

    每次url都要写一长串,麻烦。

    可以把共同的父路径提出来,写在controller上,业务方法上写子路径即可:

    @org.springframework.stereotype.Controller
    @RequestMapping("/userController")
    public class UserController{
    
        @RequestMapping("/saveUser")
        public void saveUser(){
            //......
        }
    
        @RequestMapping("/deleteUser")
        public void deleteUser(){
            //......
        }
    
        @RequestMapping("/updateUser")
        public void updateUser(User user){
            //......
        }
    
        @RequestMapping("/queryUser")
        public User queryUser(){
            //......
        }
    
    }

    访问方式和原来一样。


    我在业务方法中使用了new,实际上,使用spring时,尽量不要使用new,能用依赖注入就用依赖注入。

    如果是通用的bean,比如工具类,实例都一样,设计为单例,放到spring容器中,使用时写成成员变量的形式,用注解自动装配。

    如果是实例不一样,比如User类,每个用户的信息是不同的,设计为多例,放到spring容器中,使用时写成成员变量的形式,用注解自动装配,可以在方法中调用bean的setter方法赋值。

  • 相关阅读:
    设计模式---003代理模式(转载自我的老师 Alley-巷子)
    设计模式---002适配模式(转载自我的老师 Alley-巷子)
    设计模式---001单例模式(转载自我的老师)
    【JavaScript算法】---希尔排序(转载自我的老师 Alley-巷子)
    【JavaScript算法】---快速排序法(转载自我的老师 Alley-巷子)
    将博客搬至CSDN
    程序员10元盒饭完整版
    querylist采集数据 模拟滑动验证码 jcapche
    php压缩图片工具类(亲测可用)
    elastic-php should匹配设置至少匹配一个条件
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12241932.html
Copyright © 2011-2022 走看看