@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类一定要有无参数的构造函数。