@Controller : 标注当前对象为控制器
@RequestMapping : 标注映射规则,匹配服务请求(除值映射外还可以通配符“*”映射)
@ResponseBody : 标注当前方法返回内容为消息体
@RestController: 标注当前对象为以响应数据体形式返回的控制器(@Controller+@ResponseBody)
@Param : 将请求参数区数据映射到方法区参数下
@RequestParam : 将请求参数区数据映射到方法区参数下
@PathVariable: 将url中的参数解析到对应的方法参数上,
@CookieValue : 绑定 cookie 的值到 Controller 方法参数
用法: public void test(@CookieValue("a") String a){}
@RequestHeader : 绑定 HttpServletRequest 头信息 到 Controller 方法参数
用法: public void test(@RequestHeader("host") String host){}
@ModelAttribute :
用法1: public void test(@ModelAttribute("host") String host){}
作用 : 获取模型中的 host 的值
用法2:
@ModelAttribute("hello")
public void test(){}
作用:该方法将在处理器方法执行之前执行,然后把返回的对象存放在 session 或模型属性中,属性名称可以使用 @ModelAttribute(“attributeName”) 在标记方法的时候指定,若未指定,则使用返回类型的类名称(首字母小写)作为属性名称。
@SessionAttribute :
区别: 两者都支持在不同的模型和控制器之间共享数据,但是@ModelAttribute的参数存储在模型之中,而@SessionAttribute则存储在Session中:实例如下:
@Controller @RequestMapping("/myTest") @SessionAttributes(value = {"intValue", "stringValue"}, types = {UserDO.class}) public class MyController { @ModelAttribute("hello") public String getModel() { System.out.println("-------------Hello---------"); return "world"; } @ModelAttribute("intValue") public int getInteger() { System.out.println("-------------intValue---------------"); return 10; } @ModelAttribute("user2") public UserDO getUser() { System.out.println("---------getUser-------------"); return new UserDO(3, "user2"); } @RequestMapping("sayHello") public void sayHello(Map<String, Object> map, @ModelAttribute("hello") String hello, @ModelAttribute("intValue") int num, @ModelAttribute("user2") UserDO user, Writer writer, HttpServletRequest request) throws IOException { map.put("stringValue", "String"); writer.write("Hello " + hello + " , Hello " + user.getName() + num); writer.write("\r"); HttpSession session = request.getSession(); Enumeration enume = session.getAttributeNames(); while (enume.hasMoreElements()) writer.write(enume.nextElement() + "\r"); // hello world,hello user210 System.out.print(" " + session); // user2 intvalue stringValue(第一次无输出,只是将对象值存入Session中) }} } }
@Service : 标注当前类为业务层组件
@Respository : 标注当前类为数据访问组件(DAO)
@Component(不推荐) : 泛指组件,当组件不好归类的时候,用这个注解进行标注
@Autowired : (spring)用来装配Bean,可用于字段或者setter方法上。按照类型装配,默认情况对象必须存在,如果为空,设置Requied=false
@Resource(推荐) : (J2EE)用来装配Bean,可用于字段或者setter方法上。默认按照名称装配,找不到时才会按照类型装配,可以使用name属性指定。
@Qualifier : 配合@Autowired使用,改成按照名称匹配,可以避免使用一个具有多个同类或者不存在bean类时抛出的异常。
@PostContruct : 在方法上加上注解,会在bean初始化之后被spring容器执行。应用场景:当需要往bean注入一个父类的属性却无法复写时使用
@Scope : 定义一个bean的作用范围。示例:
@Scope("session")
public class UserSession{}