深入分析Java ClassLoader机制

作者:Rui 发布时间:August 23, 2016 分类:JAVA 浏览:1,073

做了很久的Java,写过很多关于ClassLoader的程序,也没有详细系统的的记录对ClassLoader的理解,近期也有一些时间,就将自己对于Java ClassLoader做一下总结。

ClassLoader概念

ClassLoader是Java提供的基础的类加载机制,负责将JDK,第三方的类包和用户写的Java代码,根据代码中组织方式和依赖关系,按需将class动态加载到内存中,以便JVM执行java程序。

ClassLoader 类加载器说明

JDK中自带自带有三种类型的classloader,分别是BootStrap ClassLoader, ExtClassLoader,AppClassLoader

  • BootStrapClassLoader,加载JDK的核心类库,它是Java中最顶层的加载器,默认加载JAVA_HOME/jre/lib下的jar包。
  • ExtClassLoader, 扩展加载器,加载JDK中的扩展包,默认加载JAVA_HOME/jre/lib/ext/目下的所有jar。
  • AppClassLoader,系统类加载器,负责加载应用程序classpath目录下的所有jar和class文件。

阅读剩余部分...

Gradle Application Plugin自定义Start Script

作者:Rui 发布时间:August 22, 2016 分类:JAVA 浏览:1,217

Gradle Application Plugin用于简化java项目打包成可执行的脚本程序的过程,可以极大的简化打包和执行java程序的过程。

使用简介

只要在Gradle的配置文件中添加一些配置即可,其中mainClassName 指向启动Main方法所在的类

apply plugin: 'application'
mainClassName = "com.rapid.develop.core.server.ApplicationServer"

之后执行Application Plugin的distZip或者distTar就会将程序打包为zip和tar包,解压后,在Bin目录下有两个脚本,分别是window和linux的执行脚本。

阅读剩余部分...

Tomcat 绑定域名,防止恶意解析

作者:Rui 发布时间:August 19, 2016 分类:JAVA,WEB 浏览:1,868

如果未备案的域名绑定到自己发布的web服务上,就会收到电信运行商的警告,如果不处理就可能会被工信部封停IP,所以我们在Tomcat上发布公网的web服务时,需要设置绑定域名,这样才能安全的保护自己的web服务不会被恶意解析。

配置tomcat/conf/server.xml 文件,找到下面部分:
tomcat.png

此处defaulthost="localhost" 改为"forbidden" ,表示默认所有访问都是禁止,然后将Host的name指定可以访问的域名和IP,这样就可以限制未绑定的域名不能够访问到Tomcat下的web服务。

Jedis 解决连接Redis Cluster不支持密码的问题

作者:Rui 发布时间:August 18, 2016 分类:Redis,BIGDATA 浏览:1,685

目前Jedis的发行版本,不支持使用JedisCluster连接有密码保护的Redis Cluster,这个特性已经在Github上开发完毕,将要在2.9版本发布时将其合并到主分支中。

如果迫切想使用该功能,可以自己更新最新的代码,自己合并该pull request的commit。该提交已经review通过。

这是该提交的地址,Add support to set password in JedisCluster

Hibernate 使用Event Listener 实现createDate和modifiedDate自动生成

作者:Rui 发布时间:August 18, 2016 分类:JAVA,Hibernate 浏览:1,033

程序中我们经常会需要实现记录实体的创建时间和修改时间,如果我们使用Hibernate JPA的API,可以借助注解@PrePersist和@PreUpdate来实现,但是使用Hibernate 经典的session的API这些是不起作用的,但Hibernate提供Event Listener的方式可以供我们来添加Hibernate保存,更新,删除的监听,我们可以利用PRE_INSERT和PRE_UPDATE来实现该需求。

使用JPA注解实现代码示例:

@PrePersist
public void onSave() {
    this.createDate = new Date();
    this.modifiedDate = new Date();
}

@PreUpdate
public void onUpdate() {
    this.modifiedDate = new Date();
}

阅读剩余部分...