当前位置: 首页 > wzjs >正文

江苏建设网站公司网页设计与制作论文题目

江苏建设网站公司,网页设计与制作论文题目,南京优化网站,毕业查询结果网站怎么做1 概述 在写代码的时候,有两类bean:一类是专门承载数据而无业务逻辑的bean,如DTO;另外一类是业务模型bean,其既要承载数据也要提供业务逻辑,在DDD中它们就对应于领域模型对象和值对象。这些bean里面可能要…

1 概述

在写代码的时候,有两类bean:一类是专门承载数据而无业务逻辑的bean,如DTO;另外一类是业务模型bean,其既要承载数据也要提供业务逻辑,在DDD中它们就对应于领域模型对象和值对象。这些bean里面可能要提供getter、setter、equals、hashCode、toString,甚至构造方法,这些代码写起来比较无聊,基本都是根据字段来的,属于非常机械化而无技术含量的操作,而这些操作还相当多,增加一个字段或者改一个字段也得响应地进行调整,耗时耗力的。即使定义相关规范,强制要写这些方法,也很容易遗忘掉。遗忘掉toString()方法还会导致打印到日志里的对象没有详细信息,对定位问题毫无帮助。

为了解决这个问题,像IDEA这类IDE,都提供了生成方法的手段,帮助快速生成。但更快的方法就是连生成都不需要,只有个注解就解决问题,这正是Lombok提供的方法。

2 Lombok的使用

2.1 引入依赖

在pom.xml中引入lombok包的依赖:

<properties><lombok.version>1.18.30</lombok.version>
</properties>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope>
</dependency>

2.2 使用Lombok的注解

加上注解@Data

import lombok.Data;@Data
public class Member {private Long groupId;private String name;private Integer age;private GroupMemberGender gender;
}

Lombok会帮助生成:

public class Member {private Long groupId;private String name;private Integer age;private GroupMemberGender gender;// 生成getter/setterpublic Long getGroupId() {return this.groupId;}public void setGroupId(Long groupId) {this.groupId = groupId;}public String getName() {return this.name;}public Integer getAge() {return this.age;}public void setName(String name) {this.name = name;}public void setAge(Integer age) {this.age = age;}public GroupMemberGender getGender() {return this.gender;}public void setGender(GroupMemberGender gender) {this.gender = gender;}// 生成equals()方法public boolean equals(Object o) {if (o == this) return true;if (!(o instanceof Member)) return false;Member other = (Member) o;if (!other.canEqual(this)) return false;Object this$groupId = getGroupId(), other$groupId = other.getGroupId();if ((this$groupId == null) ? (other$groupId != null) : !this$groupId.equals(other$groupId)) return false;Object this$name = getName(), other$name = other.getName();if ((this$name == null) ? (other$name != null) : !this$name.equals(other$name)) return false;Object this$age = getAge(), other$age = other.getAge();if ((this$age == null) ? (other$age != null) : !this$age.equals(other$age)) return false;Object this$gender = getGender(), other$gender = other.getGender();return !((this$gender == null) ? (other$gender != null) : !this$gender.equals(other$gender));}protected boolean canEqual(Object other) {return other instanceof Member;}// 生成hashCode()方法public int hashCode() {int PRIME = 59;result = 1;Object $groupId = getGroupId();result = result * 59 + (($groupId == null) ? 43 : $groupId.hashCode());Object $name = getName();result = result * 59 + (($name == null) ? 43 : $name.hashCode());Object $age = getAge();result = result * 59 + (($age == null) ? 43 : $age.hashCode());Object $gender = getGender();return result * 59 + (($gender == null) ? 43 : $gender.hashCode());}// 生成toString()方法public String toString() {return "Member(groupId=" + getGroupId() + ", name=" + getName() + ", age=" + getAge() + ", gender=" + getGender() + ")";}
}
反编译处理的代码,阅读性不强,只需要大致了解Lombok生成了哪些东西即可。
Lombok提供了好几个注解,这里只推荐用两个注解:
  • @Data注解:它相当于组合了@ToString、@EqualsAndHashCode、@Getter、@Setter这四个注解,注意对于final的字段不会生成setter方法。适用于那种仅传输数据的对象(如DTO)场景,注意暴露尽量少数据。
  • @Value注解:它相当于组合了@ToString、@EqualsAndHashCode、@Getter这三个注解,也就是没有setter方法。适用于那种既承载数据又带业务逻辑的业务对象,不带任何的setter方法,所有写逻辑都需要用表意的方法代替。
官方文档:Project Lombok
注解列表:
@Getter and @Setter
@FieldNameConstants
@ToString
@EqualsAndHashCode
@AllArgsConstructor
@RequiredArgsConstructor
@NoArgsConstructor
@Log
@Log4j
@Log4j2
@Slf4j
@XSlf4j
@CommonsLog
@JBossLog
@Flogger
@CustomLog
@Data
@Builder
@SuperBuilder
@Singular
@Delegate
@Value
@Accessors
@Wither
@With
@SneakyThrows
@StandardException
@val
@var
@UtilityClass

2.3 编译

上面的依赖只会使得编译能够不报错,但如果是打包或者在IDEA中运行,可能会找不到对应的生成方法。

2.3.1 IDEA配置

由于Lombok的原理还是生成静态的Java代码,并不是在运行期动态提供,所以在IDEA中使用的时候,需要安装Lombok插件,IDEA才能够在编译的时候触发Lombok把注解转成代码。

在IDEA中:File -> Setting... -> Plugins -> 搜索Lombok -> 安装插件

在新版的IDEA使用Lombok时,有可能报错:

java: You aren't using a compiler supported by lombok, so lombok will not work and has been disabled.Your processor is: com.sun.proxy.$Proxy25Lombok supports: sun/apple javac 1.6, ECJ

参考 https://github.com/projectlombok/lombok/issues/2592 里的定位,大致原因是:IDEA在编译的时候把ProcessingEnvironement 包到一个代理里了,Lombok使用javac编译注解的方式就失效了。

解决办法:到IDEA的 File -> Setting... -> Build, Execution, Deployment -> Complier -> Shared build process VM options 里填上:-Djps.track.ap.dependencies=false

2.3.2 maven编译

IDEA中虽然能够编译运行了,但实际用的时候需要打成jar包到服务器运行,直接使用spring-boot-maven-plugin插件是否能够支持Lombok呢?答案是可以支持的。

1、spring-boot-maven-plugin间接依赖了maven-compiler-plugin,可以不显式指定maven-compiler-plugin:

<!-- pom.xml中用的是spring-boot-maven-plugin插件:-->
<build><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin>
</build><!-- spring-boot-maven-plugin插件依赖plexus-build-api包:-->
<dependency><groupId>org.sonatype.plexus</groupId><artifactId>plexus-build-api</artifactId><version>0.0.7</version><scope>runtime</scope>
</dependency><!-- plexus-build-api包依赖maven-compiler-plugin插件包:-->
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.4</source><target>1.4</target></configuration>
</plugin>

2、 Lombok 通过 META-INF/services/javax.annotation.processing.Processor 文件实现自动注册

# lombok-1.18.30.jar!/META-INF/services/javax.annotation.processing.Processor
lombok.launch.AnnotationProcessorHider$AnnotationProcessor
lombok.launch.AnnotationProcessorHider$ClaimingProcessor

3、当项目依赖 Lombok 时,Maven 会扫描所有 jar 中的 META-INF/services/javax.annotation.processing.Processor。

4、Lombok执行Processor按注解生成代码。

3 架构一小步

1、引入Lombok工具,减少数据bean的getter/setter/toString的机械代码;

2、规范:在纯数据bean中使用@Data注解;

3、规范:在领域模型bean中使用@String注解,符合最小暴露的属性自行写getter,不能写setter方法,需要用表意方法代替所有写操作方法。

http://www.dtcms.com/wzjs/781812.html

相关文章:

  • 江宁住房和城乡建设局网站网络解决方案公司
  • 微网站和app的区别网站建设 源代码归属
  • python做网站商城开发简单动画制作软件
  • 网站上如何做跳转页面百度seo推广怎么做
  • 广州网站设计易企建站你那个没封的网站怎么做啊
  • 芜湖做网站福建建设执业资格官网
  • 山东济宁省建设厅官方网站北京网站优化公司哪家好
  • 怎么免费从网站上做宣传长沙0731手机平台网报价
  • 排名好的成都网站建设wordpress页面不要侧边栏
  • 做手机版网站和做app差别西安建网站公司哪家好
  • 做公众号推送的网站中国核工业第二二建设有限公司待遇
  • 北京南站到北京西站小米开放平台
  • 北京网站建设 招聘信息郑州网站建设专家
  • 九江网站建设推广oa办公系统怎么注册
  • 有趣的网站知乎网站怎么优化到首页
  • 什么都不会怎么做网站主网站下建立子目录站
  • 西安公司网站如何建设公司网站不续费
  • 网站建设小程序公众号销售网页版qq登录wordpress
  • 阜阳做网站的手机网站带后台源代码
  • 上海网站建设seo1888长沙做网站推广公司咨询
  • 住建部建设厅官方网站潍坊网站建设自助建站平台
  • 中地海外路桥建设有限公司网站关于科技的名言
  • 百度网站建设电话销售话术wordpress 启动流程
  • 找工作哪个网站好找做外语网站的公司
  • 网站建设及编辑岗位职责四川建设招标网站首页
  • 国外哪些网站可以注册域名网站制作价格上海
  • 怎么停止网站网站建设公司推荐 知乎
  • 泉州手机网站建设wordpress侧面分类插件
  • 青海微信网站建设网页制作步骤详细
  • 外贸网站搭建难不难广州南沙区建设和交通局网站