- 浏览: 824715 次
- 性别:
- 来自: 株洲->深圳
文章分类
- 全部博客 (283)
- JAVA (54)
- 数据库 (25)
- Linux (22)
- Spring (9)
- Hibernate (7)
- mybatis (1)
- struts (10)
- javascript (22)
- Web (11)
- 异常 (30)
- 工具 (21)
- pay (9)
- 软件相关 (7)
- 其它 (28)
- python (1)
- 缓存 (9)
- 面试题 (2)
- 代码规范 (14)
- 网络编程 (1)
- 架构设计 (1)
- 程序测试 (3)
- 移动 (1)
- 安全 (2)
- 服务器 (4)
- 程序员 (1)
- php (4)
- 非技术 (7)
- web容器 (3)
- 竞彩篮球 (1)
- nginx (5)
- 加密 (2)
- jquery (2)
- 原理 (2)
- 项目管理 (1)
- www..betradar.com (0)
- www.betradar.com (1)
- 爬虫 (1)
最新评论
-
July01:
有一款web 打印控件StratoIO,浏览器和系统的兼容性都 ...
WEB免费打印控件推荐(4款) -
lihaimian:
你好,有个问题咨询一个,为何我在java中,无法使用与运算符, ...
位运算、异或的实际应用 -
小黄牛:
很好谢谢分享!推荐几篇spring boot基础入门文章:ht ...
Spring Boot 快速入门 (官方quick start) -
littlesheep:
我按照你的方法从新生成了密钥可是还是报者个错误...
狗日的支付宝 -
di1984HIT:
学习了~~~
javassist:增强型的java反射工具,获取方法参数名
Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注释实现这一目的。通过在开发环境中实现 Lombok,开发人员可以节省构建诸如 hashCode()
和 equals()
这样的方法以及以往用来分类各种 accessor 和 mutator 的大量时间。
Lombok 是一种 Java Archive (JAR) 文件,可用来消除 Java 代码的冗长。
我们看这样一个例子,一个标准的 Java bean。一个典型的 Java bean 一般具有几个属性。每个属性具有一个 accessor 和 mutator(getter 和 setter)。通常还会有一个 toString()
方法、一个equals()
方法和一个 hashCode()
方法。
初看上去,其中可预见的冗余就已经非常多了。如果每个属性都具有一个 getter 和 setter,并且通常如此,那么又何必详细说明呢?
让我们来看看 Lombok。为了消除代码行,Lombok 使用注释来标识类和 Java 代码块。在前述的那个 Java bean 示例中,所有的 getter、setter 以及其他三个方法都是在编译时被暗示并包括进来的。
而且更好的是如果您使用的是 Eclipse 或 IBM® WebSphere® Studio Application Developer(如果还没用的话,建议最好使用),您就可以将 Lombok 集成到 Java 项目并即刻获得开发时结果。换言之,Eclipse 编译器可以立即识别所暗指的 getters/setters,而其他 Java 代码则可引用这些方法。
最直接的好处当然是代码行的减少,这真的很棒。并且,如果有一个特定的 getter 或 setter 需要特别的注意,那么您就不必为了找到这个特定的 getter 或 setter 而遍历数十行代码。代码也会更为简洁并且冗余也少了。
Lombok 还让您得以简化代码的其他部分 — 不仅仅是 Java bean。比如,还可以减少 try/catch/finally 块内以及同步方法内的冗余代码。
现在,我们来看看在您自己的开发环境中如何能实现上述目的。
要进行安装,本文假设您使用的是 Eclipse 或 WebSphere Studio Application Developer。如果不是,您仍可使用 Lombok;但是不能享用开发时的种种益处。不过,您仍然可以享用编译时的益处。
首先,打开您的浏览器并将 URL 指向 http://projectlombok.org/
。
在撰写本文之时,用这个 URL 打开的页面的右上角会出现一个很大的单词。这个单词是 “Download”。单击该单词并开始下载 lombok.jar。此文件无需解压缩,而从其他站点下载的文件中,99% 都需要解压缩。
下载此文件后,需要执行这个 JAR 文件。在您的操作系统中打开一个提示符,进入到安装了 lombok.jar 的那个目录,并键入 java -jar lombok.jar
。
以上假设在您的路径内已经有 Java Runtime Environment (JRE)。如果没有,需要添加它。如果要了解如何添加,可以参考针对您的具体操作系统的相关文档。
如果您使用的是 Microsoft® Windows®,那么还可以双击这个 lombok.jar 图标。同样地,您必须能够从您的图形用户界面(GUI)执行 JAR。
不管采取何种方式,应该最终都能看到一个 Lombok 安装屏幕。该屏幕会提问 Eclipse 或 WebSphere Studio Application Developer 可执行文件位于何处。它的默认位置有可能是正确的。但有时可能需要更改这个默认位置。
单击 Install/Update,Lombok 会被迅速并入 Eclipse 开发环境。如果已经运行了 Eclipse,那么就需要关闭它并重启。
现在,就可以在 Eclipse 或 WebSphere Studio Application Developer 内开始使用 Lombok 了。请参考清单 1 内的代码。
public class Lure { |
以上是一个简单的 Java bean 的典型开始。从这里,可以为每个属性添加 getters 和 setters。然后再添加一个 equals()
方法、一个 toString()
方法和一个 hashCode()
方法。
有了 Lombok,您无需自己完成上述操作。相反,您只需添加一个注释:@Data
。
没错,就这么简单。清单 2 中包括了 @Data
。
import lombok.Data |
不过请记住,只有当 lombok.jar 位于您的构建路径且 lombok.Data 被导入到这个 Java 类时,上述代码才会奏效。
如果在 Eclipse 或 WebSphere Studio Application Developer 内查看这个类的概要(通常位于屏幕上这个类的右侧),就能看到这些方法会被自动添加到这个 Lure
类。
若不能立即看到这个概要,可以单击 Eclipse 内的 Window 菜单,然后选择 Show View。 从所出现的弹出菜单中,选择 Outline,它应该出现在屏幕的右侧。强制显示类的概要的热键组合是Alt+Shift+Q, 然后是 O。
如果您编写了另一个类来实例化 Lure
,您将能立刻拥有对 Lure
所暗指的方法(比如 getName()
或setSize()
)的访问。您还能拥有对 equals()
、hashCode()
和 toString()
的访问。很棒,对吧?
如果您使用的不是 Eclipse 或 WebSphere Studio Application Developer,那么所暗指的这些方法添加只有在实际编译这些代码时才能被认可。所以虽然在没有 Eclipse 或 WebSphere Studio Application Developer 时仍可以使用 Lombok,但 Lombok 最初的设计目的就是与 Eclipse 或 WebSphere Studio Application Developer 相集成。
在生成 getter/setter 方法时,Lombok 遵从传统的标准。所有这些方法名都以 get
或 set
开头并且属性名都是大写的。当然,如果属性是一个 Boolean,情况例外。在这种情况下,getter 以 is
开始,而非 get
。这是 Java bean 的一种标准实践。
现在,假设有一个 Java bean 对您的一个 getter 具有特殊要求。在清单 2 的例子中,getStyle()
可能返回颜色和大小的组合。在这种情况下,可以按自己的意愿编写 getStyle()
方法的代码。Lombok 检查您的代码并且不会基于这个属性创建其自己的 getStyle
版本。
又假设,您有一个 getter 方法不想公开。为此,Lombok 让您可以输入一个附加参数。清单 3 给出了一个定制的修饰符(modifier)。
private String name; |
在本例中,getSize()
方法将不会被公开。它具有一个受保护的修饰符,所以它只对派生子类可用并且在 Lure
类本身的内部。
您可能并不总是想接受 Lombok 为您提供的其他默认值。比如,toString()
方法会列出类名以及所有的属性名和值,中间以逗号分割。这个列表出现在类名的旁边。
比如,假设在记录这个 Lure
类时,您并不关心颜色。为了更改 toString()
的默认设置,需要使用ToString
注释。
@ToString(exclude="color") |
若输出一个实例化了的 Lure
类,它应该看上去类似于:
Lure(name=Wishy-Washy, size=1, style=trolling) |
注意到颜色没有被包括?这是因为您之前用注释告诉过 Lombok 不包括颜色。
您还可以修改 equals()
和 hashCode()
方法该如何被处理。清单 5 很直白,不需要过多解释。
@EqualsAndHashCode(exclude="style") |
在本例中,当 equals()
和 hashCode()
方法生成时,style
属性并没有被包括。
您是不是也一直非常痛恨编写 try/catch/finally 块呢?我是这样的。幸运的是,有了 Lombok,您无需这么做了。这也是 Lombok 消除 Java 冗余的另一种方式。为了消除 try/catch/finally 块的冗余,只需使用 @Cleanup
注释。参见清单 6。
public static void main(String[] args) throws IOException { |
上述代码较我们通常在标准 Java 代码内看到的整洁了很多。请注意您还是需要抛出由被调用代码捕获的异常(在本例中,为 IOException
)。
清单 6 中的这个代码块不仅消除了 try/catch/finally 块,而且还关闭了开放流。如果您处理的对象使用一个方法而不是 close()
来释放资源,那么就需要用一个带附加说明的注释调用该方法。比如,@Cleanup("relinquish")
。
Lombok 还可以减少同步方法所需的代码的冗余。很自然,这是用 @Synchronized
方法实现的。
@Synchronized |
在本例中,Lombok 会自动创建一个名为 $lock
的实例对象,并会针对该对象同步方法 foo()
。
如果用 @Synchronized
注释的这个方法是静态的,那么 Lombok 就会创建一个名为 $LOCK
的类对象,并会针对该对象同步这个方法。
您还可以指定一个对象用以通过一个附加参数进行显式的锁定。比如,@Synchronized("myObject")
会针对对象 myObject
同步这个方法。在这种情况下,必须显式地定义它。
使用 Lombok,可以实现所有应用程序开发人员都竭尽全力实现的一个目标:消除冗余。
您还可以让您的代码可读性更好。在 Java bean 内寻找 “特殊”(即不遵循典型的标准)的具有大量属性的 getter 和 setter 方法将更为简便。这是因为只有这些特殊的 getter/setter 方法是需要被实际编码的。
Lombok 有助于代码的整洁、效率的提高以及冗余的减少。为何不在您自己的环境内尝试一下呢?
不过我感觉有些不习惯。
发表评论
-
[转]memcached底层工作原理
2014-10-28 16:40 18801、memcached是怎么工作的? Memcached的神奇 ... -
[转]Memcached性能检测
2014-10-20 15:22 1364Memcached性能检测 ... -
[转]Memcache内存分配策略
2014-10-20 14:24 1336一、Memcache内存分配机 ... -
linux 服务器挂载出问题,导致写文件失败,程序超时
2014-07-11 11:07 0linux 服务器挂载出问题,导致写文件失败,程序超时 -
HessianProxy cannot connect to 'http://localhost
2014-04-12 10:57 3281HessianProxy cannot connect t ... -
位运算、异或的实际应用
2013-12-24 15:53 10887一. 位操作基础,用 ... -
了解LinkedList原理
2013-12-25 14:38 11691.LinkedList介绍 线性链表集合,循环链表ht ... -
了解ArrayList原理
2013-12-18 10:45 11171.ArrayList 介绍 有序集合,按顺序存储元素 ... -
java Cookie的有效期
2013-12-03 19:55 6033Cookie的有效期 Cookie的maxAge决定着Co ... -
10 道 Java 泛型面试题
2013-10-20 19:07 1804关于泛型的面试题在 Java面试中变得越来越常见,因为 Ja ... -
memcached安装步骤
2013-08-10 10:15 1182版本:memcached-1.4.13 由于memc ... -
tomcat 访问记录日志
2013-05-17 01:43 1730Tomcat7.0.xx访问请求记录是默认打开的 ... -
支付宝RSA 公私钥 程序生成,openssl rsa 密钥程序生成,想要多少有多少
2013-05-01 00:21 30611.先配置好openssl 环境变量 保证cmd 输 ... -
MD2withRSA is disabled
2013-04-25 14:44 1762请求https报以一错误: javax.net.ssl.S ... -
狗日的支付宝
2013-04-24 23:26 14714用openssl 生成的密钥老是报以下错误: ja ... -
quartz 启动时会自动启动检测是否有可用的新版本
2013-04-24 20:06 1847日志提示: [org.quartz.utils.Updat ... -
Data truncation: Incorrect datetime value: '' for column 'createTime' at row
2013-03-22 17:11 22046mysql SQL Error: 0, SQLState: ... -
session失效通过头信息判断跳转
2013-03-13 18:06 1676/** * 拦截用户是否登录跳转到登录页 * 页面请 ... -
jsonlib转换树型数据没其它框架好
2013-01-26 14:39 1446jsonlib的性能请看这篇文章:http://wangym ... -
[ava.net.SocketException四大异常解决方案
2012-12-05 12:31 5310java.net.SocketException如何才能 ...
相关推荐
《Python库tencentcloud-sdk-python-memcached-3.0.556详解》 在IT行业中,Python作为一门简洁且强大的编程语言,被广泛应用于各种领域,包括但不限于数据分析、机器学习、网络爬虫以及云计算等。而在这些应用场景...
《PyPI上的腾讯云Python Memcached SDK:tencentcloud-sdk-python-memcached-3.0.315详解》 PyPI(Python Package Index)是Python开发者常用的软件包仓库,提供了一个广泛且丰富的Python库集合,供全球的开发人员...
资源分类:Python库 所属语言:Python 资源全名:tencentcloud-sdk-python-memcached-3.0.418.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类:Python库 所属语言:Python 资源全名:tencentcloud-sdk-python-memcached-3.0.567.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
《Python库tencentcloud-sdk-python-memcached-3.0.335详解》 在IT行业中,Python作为一门简洁且强大的编程语言,被广泛应用于各种领域,包括但不限于数据分析、机器学习、网络开发等。而当涉及到云计算服务时,...
ssm3-mybatis2-memcached 使用了 simple-spring-memcached 。因为 mybatis-memcached 不支持 MyBatis2(iBatis),只能用在 MyBatis3 里。但是因为有的项目还跑在 MyBatis2 版本上,所以也做一个例子。 mm-mybatis3-...
总的来说,Redis-x64-3.0.501是Redis的一个稳定版本,为Windows用户提供了一种在本地环境部署和使用Redis的便捷方式。无论是在开发环境中测试数据结构,还是在生产环境中作为高性能缓存或消息中间件,Redis都展现出...
cas-client-support-distributed-memcached-3.2.0.jar
Simple-Spring-Memcached(SSM)是将Memcached缓存系统与Spring框架紧密结合的一个优秀项目,它提供了一种优雅的方式来实现基于注解的缓存管理,极大地简化了Java开发者在Spring应用中使用Memcached的过程。...
Redis,全称Remote Dictionary Server,是一款高性能的键值存储系统,由Salvatore Sanfilippo创建,最初是为了解决Memcached在某些特定场景下的性能问题。它支持数据持久化,提供丰富的数据结构,如字符串、哈希表、...
simple-spring-memcached是一个开源项目,它为Spring提供了对Memcached的支持,使我们可以轻松地在Spring应用中添加缓存功能。它支持多种Memcached客户端,包括spymemcached、xmemcached等,这样我们就可以根据自己...
Simple-Spring-Memcachd(SSM)企图通过实现几个基础的使用项来简化Memcached的使用。 该项在java-memcached客户端的基础上使用java5的注解和Sping/AspectJ的AOP,使能够在Sping中管理bean缓存。使用Simple-Spring-...
java-memcached-2.6.6.jar
memcached-1.4.jar memcached-1.4.jar memcached-1.4.jar
安装php-memcached扩展 https://github.com/php-memcached-dev/php-memcached tar -zxvf ...
总之,"Nagios-Plugins-Memcached-0.02.tar.gz"是一个对Memcached服务器进行性能监控的Nagios插件,通过集成它,你可以获得关于Memcached内存使用、连接状态等重要信息的实时反馈,以便更好地管理和维护你的Web应用...
MSM--memcached session manager是一个高可用的Tomcat session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用memcached存取Session,以实现高可用。对于非黏性Session,...
《深入理解Memcached:基于1.5.11版本的剖析》 Memcached,一个高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。本文将深入探讨Memcached的1.5.11版本,解析其...
java运行依赖jar包
这个包是最高版本了,google code是1.22,但是这个版本是基础班的1.5版本.是github上源代码经过我打包出来的jar