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方法賦值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM