Spring学习——常用注解总结

145 阅读3分钟

@Component

@Component是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用

@Controller

标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象

@RestController

Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认该Controller所有方法返回json格式

@Service

在业务逻辑层使用(service层)

@Repository

在数据访问层使用(dao层)

@Autowired:

  • 用来装配bean,日常开发中一般写在属性上
  • 默认按类型匹配的方式,在容器查找匹配的Bean,当有且仅有一个匹配的Bean时,Spring将其注入@Autowired标注的变量中

@Qualifier(指定注入Bean的名称):

如果容器中有一个以上匹配的Bean,则可以通过@Qualifier注解限定Bean的名称

@Resource:与@Autowired注解作用非常相似

  • @Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
  • 指定了name或者type则根据指定的类型去匹配bean
  • 指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错

@RequestMapping

  • 类定义处: 提供初步的请求映射信息,相对于 WEB 应用的根目录
  • 方法处: 提供进一步的细分映射信息,相对于类定义处的 URL

@RequestParam

用于将请求参数区数据映射到功能处理方法的参数上

@ModelAttribute

注解用于将方法的参数或方法的返回值绑定到指定的模型属性上,并返回给Web视图
标记在方法上
标记在方法上,会在每一个@RequestMapping标注的方法前执行,如果有返回值,则自动将该返回值加入到ModelMap中

  • @ModelAttribute注释void返回值的方法
    • 这个例子,在获得请求/helloWorld 后,populateModel方法在helloWorld方法之前先被调用,它把请求参数(/helloWorld?abc=text)加入到一个名为attributeName的model属性中,在它执行后 helloWorld被调用,返回视图名helloWorld和model已由@ModelAttribute方法生产好了。
    • 这个例子中model属性名称和model属性对象有model.addAttribute()实现,不过前提是要在方法中加入一个Model类型的参数。
    • 当URL或者post中不包含此参数时,会报错,其实不需要这个方法,完全可以把请求的方法写成,这样缺少此参数也不会出错
  • @ModelAttribute注释返回具体类的方法 说明:这种情况,model属性的名称没有指定,它由返回类型隐含表示,如这个方法返回Account类型,那么这个model属性的名称是account。这个例子中model属性名称有返回对象类型隐含表示,model属性对象的值就是方法的返回值。它无须要特定的参数。
  • @ModelAttribute("attributeName")注释返回具体类的方法 说明:这个例子中使用@ModelAttribute注释,并使用注解指定的attributeName属性来指定model属性的名称。model属性对象的值就是方法的返回值。它无须要特定的参数。
  • @ModelAttribute和@RequestMapping同时注释一个方法 说明:这时这个方法的返回值并不是表示一个视图名称,而是model属性的值,视图名称由RequestToViewNameTranslator根据请求”/helloWorld.do”转换为逻辑视图helloWorld。 Model属性名称由@ModelAttribute("attributeName")指定,相当于在request中封装了key=attributeName,value=hi。

@ModelAttribute注释一个方法的参数

  • 从model中获取 说明:在这个例子里,@ModelAttribute("user") User user注释方法参数,参数user的值来源于addAccount()方法中的model属性。此时如果方法体没有标注@SessionAttributes("user"),那么scope为request,如果标注了,那么scope为session。
  • 从Form表单或URL参数中获取(实际上,不做此注释也能拿到user对象) @Controller 说明:注意这时候这个User类一定要有无参数的构造函数。