zoukankan      html  css  js  c++  java
  • 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:环绕通知

        

  • 相关阅读:
    mysql的小练习
    实用IMX6开发板来袭, 方便开发板方便你
    又到开学季 学习神器走一波 物联网开发板
    如何修改开发板主频--迅为iMX6UL开发板
    迅为4412开发板实战之智能网关项目
    iTOP-iMX6开发板Android系统下LVDS和HDMI双屏异显方法
    恩智浦iMX6Q核心板/飞思卡尔Cortex-A9高稳定性低功耗开发板
    嵌入式ARM开发板学习方法步骤
    迅为iMX6UL Cortex-A7架构单核ARM开发板接口介绍-支持定制
    三星系列NXP系列核心板设计研发-迅为嵌入式ARM方案提供商
  • 原文地址:https://www.cnblogs.com/zhouchangyang/p/10907822.html
Copyright © 2011-2022 走看看