Spring常用注解:
1.@Controller @Service @Repository @Component
Controller层:Controller
Service层:Service
dao层:Repositiry
如果一个bean不属于上述三层中的任意一个,那么就是用Component注解
通过spring配置将被这四个注解过的类配置为bean.
2.@RequestMapping("/url"),写在Controller层的方法头上,当然类的头上也可以写,不过地址要叠加.
表示该处理器映射的地址.
3.@ResponseBody, 写在Cotroller层的方法头上
表示该处理器返回的是json数据.
如果不写则返回一个jsp或html页面.
4.@RequestBody
这个注解写在接受的参数前,用于接受前端发送过来的json数据.
5.@PathVariable
用来接受前端发送的占位符
前端占位符格式:
后台处理器接受:
@RequestMapping("show/{id}/{name}")
public ModelAndView test5(@PathVariable("id") Long ids ,@PathVariable("name") String names){ ModelAndView mv = new ModelAndView(); mv.addObject("msg","占位符映射:id:"+ids+";name:"+names); mv.setViewName("hello2"); return mv; }
6.@RequestParam
接受前端参数,可以重新定义参数的key, 或者给参数一个默认值
<form action="/WxProgram/json/requestParamTest" method="get"> requestParam Test<br> 用户名:<input type="text" name="username"><br> 用户昵称:<input type="text" name="usernick"><br> <input type="submit" value="提交"> </form>
@RequestMapping(value="/requestParamTest", method = RequestMethod.GET) public String requestParamTest(@RequestParam(value="username") String userName, @RequestParam(value="usernick") String userNick){ System.out.println("requestParam Test"); System.out.println("username: " + userName); System.out.println("usernick: " + userNick); return "hello"; }
注意:属性value可以不写但默认就是后边的参数,所以参数名必须跟前端参数名相同.
这里的例子是写了value的值,所以后边参数名可以自定义.
7.@Resource 从spring容器中取出对象,并根据id装配
例:方式1:
@Resource(name = "bookServiceImpl") private BookService bookService;
@Service
public class BookServiceImpl implements BookService {
}
name = "bookServiceImpl" 表示这是BookServiceImpl的对象,默认会找到类名的小写作为名字;
方式2:
@Resource
private BookService bookService;
@Service("bookService")
public class BookServiceImpl implements BookService {
}
@Service("bookService")表示给这个类赋一个值:bookService,取对象的时候就直接取这个名字
方式3:可以都不写,(常用)
@Resource private BookService bookService; @Servicepublic class BookServiceImpl implements BookService { }
8.@Autowired 与@Resource一样是从spring容器中取对象,不同的是这是根据类装配
@Autowired
private BookService bookService;
9.@ControllerAdvice 批量的为多个Controller统一增加一些功能
@ControllerAdvice用:
可以批量的为多个Controller统一增加异常处理和InitBinder
*/
//批量为某些包下的所有Controller增加功能
//@ControllerAdvice(basePackages = {"com.lanou.demo.controller"})
//如果所有Controller都在同一个包下
//@ControllerAdvice({"com.lanou.demo.controller"})
//指定为某些Controller增加功能
//@ControllerAdvice(assignableTypes = {DateController.class})
//指定为某个类所在的包下的所有的Controller增加功能
//@ControllerAdvice(basePackageClasses = {BookController.class})
//为哪些注解所标记的Controller增加功能
//@ControllerAdvice(annotations = {Controller.class, RestController.class})
//为哪些注解所标记的Controller增加功能 @ControllerAdvice(annotations = {Controller.class, RestController.class}) //@RestControllerAdvice 与 @RestController 意义是一样的 public class sqlException { @InitBinder public void initBinder(WebDataBinder binder){ //可以为当前的Controller绑定一个时间转换器 binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd")); } //绑定一个异常处理 @ExceptionHandler(SQLException.class) public String erro(Model model, SQLException ex){ model.addAttribute("message",ex.getMessage()); return "erro"; }
10.@ExceptionHandler :用于标记方法 可以处理当前Controller中Handler抛出的异常这个规则与Controller中的其他方法的规则是一样的
跟@RerusetMapping和PostMapping一样可以返回页面或者json对象
/* 在某个Controller中使用ExceptionHandler可以处理当前Controller中抛出的异常 这个规则与Controller中的其他方法的规则是一样的 这个ExceptionHandler方法可以写多个,针对不同类型的异常做不同的处理 方法参数中可以增加一个异常对象,用来获取捕获到的异常对象 */ @ExceptionHandler(SQLException.class) public String erro(Model model, SQLException ex){ model.addAttribute("message",ex.getMessage()); return "erro"; } @ExceptionHandler(IOException.class) @ResponseBody public Map<String,Object> erroJson(IOException ex){ return Collections.singletonMap("message",ex.getMessage()); }
11.@InitBindler 为当前Controller绑定一个时间转换器
@Controller public class BookController { @RequestMapping("/register") @ResponseBody public String register(Date date){ SimpleDateFormat format = new SimpleDateFormat("yyy年MM 月dd日"); return format.format(date); } @InitBinder public void initBinder(WebDataBinder binder){ //可以为当前的Controller绑定一个时间转换器 binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd");
} }
12.@Validated : 绑定数据,对数据进行校验
常用检验规则:
@NotNull(message = "书名不能为空")
@DecimalMin(value = "20",message = "不能低于20元")
@NotNull(message = "价格不能为空")
@DecimalMax(value = "100",message = "不能多于100")
//正则表达式检验
//正则表达式用来判断某个字符串是否符合某个规则
//或者用来提取一整个字符 串中满足某个规则的子串
@Pattern(regexp = "1[345678][0-9]{9}")
具体用法见下一章:数据校验.
13.@Aspect
用于面向切面编程(AOP),定义一个切面,(切面是一个类),具体用法见springAOP章节.
14.@Pointcut
定义切面里面的切点
15.切面里的通知注解:
@Before:前置通知
@After:后置通知
@AfterReturnning:方法正常执行通知
@AfterThrowing:异常通知
@Around:环绕通知