【JavaWeb】lombok简述

lombok

  • 01_BaseServlet再优化
  • 02_lombok
    • 2.1 概述
    • 2.2 环境搭建
    • 2.3 注解
      • 2.3.1 @Getter、@Setter注解
      • 2.3.2 @ToString注解
      • 2.3.3 @NoArgsConstructor、@AllArgsConstructor
      • 2.3.4 @Data

01_BaseServlet再优化

  • 优化思路
    • 可以将方法的返回值转换为json,并将该json字符串作为服务器响应正文返回给浏览器
  • 代码实现
      @WebServlet(name = "BaseServlet",urlPatterns = "/base")
      public class BaseServlet extends HttpServlet {
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              String methodName = request.getParameter("methodName");
              try {
                  Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
                  if (null != method) {
                      Object returnValue =  method.invoke(this,request,response);
                      //判断方法上是否有@MyResponseBody注解
                      boolean present = method.isAnnotationPresent(MyResponseBody.class);
                      if (present) {
                          //有@MyResponseBody注解,方法的返回值是一个json字符串
                          if (returnValue.getClass() == String.class) {
                              //返回值是一个json字符串
                              response.setContentType("application/json;charset=utf-8");
                              response.getWriter().write(returnValue+"");
                          } else {
                              //返回值是一个java对象
                              JsonUtils.writeJsonStr(response,returnValue);
                          }
      
                      } else {
                          //没有@MyResponseBody注解,就是资源的路径
                          String newReturnValue = (String) returnValue;
                          if (null != returnValue) {
                              //是否有":"
                              int index = newReturnValue.lastIndexOf(":");
                              if (-1 == index) {
                                  //没有":"
                                  request.getRequestDispatcher(newReturnValue).forward(request,response);
                              } else {
                                  //有":"
                                  String path = newReturnValue.substring(index + 1);
                                  if (newReturnValue.startsWith("redirect")){
                                      //重定向
                                      response.sendRedirect(request.getContextPath() + File.separator + path);
                                  } else if (newReturnValue.startsWith("forward")){
                                      //请求转发
                                      request.getRequestDispatcher(path).forward(request,response);
                                  }
                              }
                          }
                      }
      
      
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              doPost(request, response);
          }
      }

02_lombok

2.1 概述

  • 概念
    • 面对工作中大量重复的,毫无技术含量的get,set方法,你是不是怨恨过?
    • Lombok是一种java使用技术,可用来帮助开发人员消除java中的冗长的代码,尤其是对于简单的 Java对象(POJO),它通过注解实现这一目的.
  • 注解
    【JavaWeb】lombok简述_第1张图片

2.2 环境搭建

  • 给idea配置Lombok插件
    • file -> settings -> plugins
  • 当前工程导入lombok.jar
  • enable annotation processing
    【JavaWeb】lombok简述_第2张图片

2.3 注解

2.3.1 @Getter、@Setter注解

  • @Getter
    • 生成get方法
    • 既可以用到类上,也可以用到成员变量上
      @Target({ElementType.FIELD, ElementType.TYPE})
      @Retention(RetentionPolicy.SOURCE)
      public @interface Getter {
          AccessLevel value() default AccessLevel.PUBLIC;//更改get方法的权限修饰符
      }
  • @Setter
    • 生成set方法
    • 既可以用到类上,也可以用到成员变量上
      @Target({ElementType.FIELD, ElementType.TYPE})
      @Retention(RetentionPolicy.SOURCE)
      public @interface Setter {
          AccessLevel value() default AccessLevel.PUBLIC;//更改set方法的权限修饰符
      }

2.3.2 @ToString注解

  • @ToString
    • 生成toString方法
    • 只能使用到类上
      @Target({ElementType.TYPE})
      @Retention(RetentionPolicy.SOURCE)
      public @interface ToString {
      
          String[] exclude() default {};//排除某些属性
      
          String[] of() default {};//包含某些属性
      
      }

2.3.3 @NoArgsConstructor、@AllArgsConstructor

  • NoArgsConstructor
    • 生成无参构造方法
      @Target({ElementType.TYPE})
      @Retention(RetentionPolicy.SOURCE)
      public @interface NoArgsConstructor {
      
          AccessLevel access() default AccessLevel.PUBLIC;//设置方法的权限修饰符
      
      }
  • AllArgsConstructor
    • 根据类中的所有字段生成有参构造方法
      @Target({ElementType.TYPE})
      @Retention(RetentionPolicy.SOURCE)
      public @interface AllArgsConstructor {
      
          AccessLevel access() default AccessLevel.PUBLIC;//设置方法的权限修饰符
      
      }

2.3.4 @Data

  • @Data
    • 生成无参构造、get/set方法、hashCode方法、equals方法、toString方法
      @Target({ElementType.TYPE})
      @Retention(RetentionPolicy.SOURCE)
      public @interface Data {
          String staticConstructor() default "";
      }
  • 代码实现
      @Data
      @NoArgsConstructor
      @AllArgsConstructor
      public class User {
      
          private Integer id;
          private String username;
          private String password;
          private String email;
      
      }

你可能感兴趣的:(JavaWeb)