Spring注解

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:环绕通知

 

    

 


posted on 2019-05-22 18:45  周昌洋  阅读(110)  评论(0编辑  收藏  举报

导航