SpringMVC总结之常用注解

版权声明:@AaronFo https://blog.csdn.net/sinat_33212645/article/details/85063217

目录

1.@Controller

2.@RequestMappering

3.@RequestParam

4.@PathVariable

5.@RequestHeader

6.@CookieValue

7.@SessionAtributes

8.@ModelAttributes


1.@Controller

1.1 使用用途:指示Spring类的实例是一个负责处理具体业务逻辑的控制器;

1.2 使用位置:类;

扫描二维码关注公众号,回复: 4605358 查看本文章

1.3 使用说明:在SpringMVC配置文件中配置<context:component-scan base-package="org.***." />元素,启动包扫描功能,以便带注解的类成为Spring的Bean,base-package:需要扫描的类包及其子包;

1.4 注解支持的属性:无

1.5 应用示例

2.@RequestMappering

2.1 使用用途:指示Spring用哪一个类或者方法来处理请求动作,完成请求映射;

2.2 使用位置:类、方法

2.3 注解支持的属性:

  2.3.1 value属性:

            1)默认属性,用于指定请求的实际地址映射到方法上;

            2)格式:@RequestMapping(value="/hello")  或者 @RequestMapping(/hello")仅存在value单一属性情况下使用后者;

   2.3.2 method属性:

           1)说明:指示该方法仅处理哪些类型的HTTP请求方式,例如GET、POST、PUT、DELETE等;

           2)格式:@RequestMapping(value="/hello",method=RequestMethod.POST)

   2.3.3 consumes属性:

           1)说明:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;;

           2)格式:@RequestMapping(value="/hello",method=RequestMethod.POST,consumes="application/json")

  2.3.4 produces属性:

           1)说明:指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型;

           2)格式:@RequestMapping(value="/hello",method=RequestMethod.POST ,produces="application/json")

  2.3.5 params属性:

           1)说明:指定request中必须包含某些参数值时才让该方法处理;

           2)格式:@RequestMapping(value="/hello",method={RequestMethod.POST,RequestMethod.GET},params="name=Aaron")

  2.3.6 headers属性

           1)说明:指定request必须包含某些指定的header值,才让该方法类处理;

           2)格式:@RequestMapping(value="/hello",method=RequestMethod.POST ,headers="Rererer=http://....")

2.4 应用示例

3.@RequestParam

3.1 使用用途:用于将指定的请求参数赋值给方法中的形参;

3.2 使用位置:方法、方法参数

3.3 注解支持的属性:

  3.3.1 name属性:

           1)说明:指定请求头绑定的名称;

  3.3.2 value属性:

           1)说明:name属性的别名;

           2)格式:public ModelAndView login(@RequestParam(value="userName") String userName){}

  3.3.3 required属性:

           1)说明:指示参数是否必须绑定

           2)格式:public ModelAndView login(@RequestParam(value="userName",required = true ) String userName){}

  3.3.4 defaultValue属性:

           1)说明:若没有传递参数,使用默认值

           2)格式:public ModelAndView login(@RequestParam(value="userName",required = true ,defaultValue="admin") String userName){}

3.4 使用示例

4.@PathVariable

4.1 使用用途:获得请求URL中的动态参数;

4.2 使用位置:方法参数

4.3 注解支持的属性:

           1)说明:只支持一个String类型的value属性,表示绑定的名称,若省略则默认绑定同名参数,例如地址栏地址为:http://localhost:8080/demo/pathVariableTest/Aaron;则userName将被赋值为Aaron;

           2)格式:

                 @RequestMapping(value="/pathVariableTest/{userName}")

                 public void pathVariableTest(@PathVariable String userName){}

4.4 使用示例

浏览器请求地址:

 后台控制器中的方法:

5.@RequestHeader

5.1 使用用途:用于将请求的头信息区数据映射到功能处理方法的参数上;

5.2 使用位置:方法参数

5.3 注解支持属性:

  5.3.1 name属性:

           1)说明:指定请求头绑定的名称;

  5.3.2 value属性:

           1)说明:name属性的别名;

           2)格式:public void requestHeaderTest(@RequestHeader(value="Accept") String[] accepts)

 5.3.2 required、defaultValue属性:与其他注解的同名属性同理,不在表述;

5.5 使用示例

6.@CookieValue

6.1 使用用途:用于将请求的Cookie数据映射到功能处理方法的参数上;

6.2 使用位置:方法参数

6.3 注解支持的属性:name、value、required和defaultValue属性,与其他注解的同名属性同理,不在表述;

6.4 注解格式示例:

     public void cookieValueTest(@CookieValue(value="JSESSIONID",defaultValue="") String sessionId)

6.5 使用示例

7.@SessionAttributes

7.1 使用用途:注解允许我们有选择地指定Model中哪些属性需要转存到HttpSession对象中;

7.2 使用位置:只能声明在类上,不能声明在方法上;

7.3 注解支持的属性:

   7.3.1 names属性:

           1)说明:Model中属性的名称,即存储在HttpSession当中的属性名称;

  7.3.2 value属性:

           1)说明:names属性的别名;

           2)格式:@SessionAttributes(value="user")/  @SessionAtributes(value={"user","dept"})

  7.3.3 types属性:

           1)说明:指定放入HttpSession当中对象的类型;

           2)格式:@SessionAtributes(types={User.class,Dept.class},value={"user","dept"})

7.4 使用示例

8.@ModelAttributes

8.1 使用用途:将请求参数绑定到Model对象;

8.2 使用位置:方法

8.3 支持的属性:仅支持类型为String的value属性,表示绑定属性的名称;

9.@Resource和@Autowired

9.1 使用用途:@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入;

9.2 共同点:两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

9.3 不同点:

   9.3.1 :@Autowired:

         1)@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。

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

         2)@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:


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

    9.3.2 :@Resource:

            1)@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。

            2)@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;
    }
}

猜你喜欢

转载自blog.csdn.net/sinat_33212645/article/details/85063217