SSM中的相关注解
-
@Resource
jdk1.8以前自带,之后就没了,需要添加javax.annotation-api包
只有在*Service/Impl实现类中进行@Service注解,并已经在spring.xml导入该service包的扫描,才能通过注解查到
先按照名字找,找不到在按照类型去找
@Resource(name = "question"),注解指定了按照名称去找,不会再按照类型去找了
@Resource(type= Question.class),注解指定了按照类型去找,不会再按照名称去找了
-
@Autowired
可以代替@Resource
只有在*Service/Impl实现类中进行@Service注解,并已经在spring.xml导入该service包的扫描,才能通过注解查到
只按照类型去找,叫什么无所谓
如果想按照名字去找,需要配合@Qualifier("名称")去找
但要注意注解在*Service/Impl的实现类中查找,实现类的名称是首字母改成小写的名称,(如类名为:QuestionTypeServiceImpl,则查询的名称为questionTypeServiceImpl)
可以在实现类的@Service("名称")与@Qualifier("名称")一致,或者将@Qualifier("名称")中的名称改为实现类的名称首字母小写的名称questionTypeServiceImpl。
-
@Controller
spring中的注解
-
@RequestParam("名称")
在网页提交数据时,表单中的标签的属性name中的名称需要对应Controller中的方法的形参列表中形参的名称,当形参名不匹配时,springmvc不会识别对应的对象,获取对应的值,此时,只需要调用@RequestParam("名称")注解,输入与网页中name对应的名称,即可获取该值。
@RequestParam(value="名称",required = false,defaultValue="默认值")
value和name的作用一样
required默认值为true,必须传值才能行;
如果改成false,就跟不加注解名称对应产生的效果一样,可以不传值。
defaultValue是添加默认值,如果网页中没有传值,则将默认值传入。
-
@RequestHeader("属性")
作用: 获取请求头的信息
一般获取请求头信息,通过调用request.getHeader("accept")获得请求头信息。
通过在形参列表中@RequestHeader("accept")String accept,即可获取请求头信息。
-
@CookieValue("属性")
之前的方法通过CookieUtile工具类进行获取。
通过在形参列表中@CookieValue("JSESSIONID")String sessionId,即可获取请cookie的相关信息。
//4,5,6相关代码
@PostMapping("insert")
public String insert(@RequestParam(value = "title",required = false,defaultValue = "类型") String title, Integer sort,@RequestHeader("accept") String accept,@CookieValue("JSESSIONID") String sessionId,HttpServletRequest request)
{
//String accept = request.getHeader("accept");
System.out.println(accept);
System.out.println(sessionId);
System.out.println("title="+title);
return null;
}
-
@SessionAttributes("名称")
一般存到session中,通过request存到session中。
当属性值共享到ModelAndView/Model/ModelMap中时,会同时放在session中一份。
@SessionAttributes("questionTypes") public class QuestionTypeController {}从Session中取值:
${sessionScope.questionTypes}
-
@SessionAttribute("名称")
用在形参列表中,将session中的数据取出来,给对应类型的对象。
一般从session中取数据,通过request中取。
@GetMapping("update") @ResponseBody public void update(@SessionAttribute("questionTypes") List<QuestionType> questionTypes) { questionTypes.forEach(System.out::println); }
-
@RequestAttribute("名称")
用在形参列表中,将request中的数据取出来,给对应类型的对象。
一般通过request取。
@GetMapping("update") @ResponseBody public void update(@RequestAttribute("questionTypes") List<QuestionType> questionTypes) { questionTypes.forEach(System.out::println); }
-
@ModelAttribute("名称")
作用:①放到方法前,指定功能处理方法,并含有@RequestMapping注解,返回值共享到ModelAndView的属性名中。
② 放到控制器的普通的方法前面,没有加@RequestMapping注解,在执行控制器的所有的其他功能处理方法时,都会执行该方法,并且会共享返回值到ModelAndView中。
@ControllerAdvice public class CommonControllerAdvice { @ModelAttribute("menus") public List<Menu> findMenus() { return menuService.findAll(); } }执行所有方法前,先执行该方法,并将返回值放到ModelAndView中,网页中可以直接通过Request调用。
③可以将注解的数据转发到网页,并且可以修改网页调用的对象名。
@PostMapping("insert") public String insert(@ModelAttribute("questionType") QuestionType questionType) { if (questionType.getTitle() == null || questionType.getTitle().length() < 3) { //命令对象questionType会共享到转发到的页面上,默认的属性名为参数名questionType, //可以通过@ModelAttribute注解修改共享的属性名 return "manage/questionType/insert"; } questionTypeService.insert(questionType); return "redirect:/manage/questionType/list"; }拓展:
@RequestMapping("list") @ModelAttribute("questionTypes") public List<QuestionType> list() { return questionTypeService.findAll(); }(1)Model代替@ModelAttribute
@RequestMapping("list") public void list(Model model) { model.addAttribute("questionTypes", questionTypeService.findAll()); }(2)ModelMap代替@ModelAttribute
@RequestMapping("list") public void list(ModelMap modelMap) { //modelMap.addAttribute("questionTypes", questionTypeService.findAll()); //modelMap自带put()方法,与上述操作效果一样 modelMap.put("questionTypes", questionTypeService.findAll()); }(3)ModelAndView代替@ModelAttribute
//注意这里不需要new,但ModelAndView必须返回 @RequestMapping("list") public ModelAndView list(ModelAndView modelAndView) { modelAndView.addObject("questionTypes", questionTypeService.findAll()); return modelAndView; }

浙公网安备 33010602011771号