zoukankan      html  css  js  c++  java
  • lombok插件

    1.Lombok插件使用注解的方式,在代码编译阶段按照一定的规则生成类的setter/getter/constructor/equals/hashCode等方法

    2.首先新建一个实体类,这里新建User.java

    3.@Setter @Getter 注解

      1)用在类上

    @Setter @Getter
    public class User {...}
    

       编译之后的User.class自动生成了属性id的setter和getter

    public class User {
        private String id;
    
        public User() {
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getId() {
            return this.id;
        }
    }
    2)用在方法上,生成的class文件和用在类上是一样的
    public class User {
        @Setter @Getter
        private String id;
    }
    @Setter和@Getter的value属性:设置setter和getter的访问级别,默认值是 AccessLevel.PUBLIC;
    @Setter(value = AccessLevel.PRIVATE)
    

      

    @Setter(AccessLevel.PRIVATE)
    

     @Setter & @Getter的onMethod属性:在注解中使用其他组件的注解(如hibernate,mybatis等)

      源文件:

    import lombok.AccessLevel;
    import lombok.Getter;
    import lombok.Setter;
    
    import javax.persistence.Column;
    
    public class User {
        @Setter(onMethod = @_(@Column(name="user_id"))) @Getter
        private String id;
    }
    

      User.class:其中@column注解便是使用@setter(onMethod=xx)进行方法注解的

    import javax.persistence.Column;
    
    public class User {
        private String id;
    
        public User() {
        }
    
        @Column(
            name = "user_id"
        )
        public void setId(String id) {
            this.id = id;
        }
    
        public String getId() {
            return this.id;
        }
    }
    

     @Getter的lazy属性:一般用在private final的缓存属性上,lazy默认是false,如果设置为true,则会在实际使用到缓存的时候才会生成缓存,并且Lombok会自动处理线程安全的问题。

    User.java
    public class User {
        @Getter(lazy = true)
        private final Map cache = initXXCatch();
        private Map initXXCatch(){
            return  new HashMap();
        }
    }
    
    User.class
    lazy=true  
      private final AtomicReference<Object> cache = new AtomicReference();
    
      public Map getCache() {
            Object value = this.cache.get();
            if (value == null) {
                AtomicReference var2 = this.cache;
                synchronized(this.cache) {
                    value = this.cache.get();
                    if (value == null) {
                        Map actualValue = this.initXXCatch();
                        value = actualValue == null ? this.cache : actualValue;
                        this.cache.set(value);
                    }
                }
            }
    
            return (Map)((Map)(value == this.cache ? null : value));
        }
    
    lazy=false生成的getter:
    private final Map cache = this.initXXCatch(); public Map getCache() { return this.cache; }

    @Setter的onParam属性:这个注解和onMethod一样,也是在注解中加入注解

    4.@NonNull注解:

    5.@ToString注解

    6.@EqualsAndHashCode注解

    7.@Data注解

    8.@Synchronized注解

    9.@SneakyThrows注解

  • 相关阅读:
    使用边缘计算来改变5G世界中的网络
    解开关于人工智能的六个迷思
    哪些数据将成为区块链系统的关键数据?
    如何通过7个步骤构建机器学习模型
    人工智能的发展体现了人类社会由实向虚的趋势
    5G技术与人工智能的智能结合
    量子计算总是混合的,这需要不断协调
    7.5省队集训 tree
    bzoj2989&4170: 数列
    bzoj1010: [HNOI2008]玩具装箱toy
  • 原文地址:https://www.cnblogs.com/cici20166/p/8491155.html
Copyright © 2011-2022 走看看