Java的Serializable接口

在写RPC调用的时候,难免会用到Serializable序列化,这个时候传输的对象就必须实现java.io.Serializable接口,这个接口里面没有方法也没有属性,只有一个长长的注释,我们看下这个注释都写了啥内容,总结如下

  1. 类要能被序列化必须实现Serializable的接口,没有实现这个接口的不能被序列化和反序列化,虽然这个接口既没有方法也没有属性,仅仅是语义上的一个声明.可能抛出NotSerializableException
  2. 如果父类实现了这个接口,那么他所有的子类都可以被序列化
  3. 如果子类实现了这个接口,而父类没有,那么为了让这个子类能被序列化,父类必须有一个子类能够访问到的无参构造函数.这样做的原因是为了让子类在反序列化构建的时候能正确的初始化他的父类。
  4. 如果想要自定义序列化和反序列化的过程,那么可以实现下面几个方法。
    writeObject 用来写入序列化数据
    readObject 用来恢复序列化数据
    readObjectNoData 用来读取特殊情况,比如发送方和接收方的类信息版本不一致或者一个继承了父类一个没有继承。或者stream信息不完整或者遭到破坏.
  5.  static 和 transient 修饰的字段会被忽略
  6.  serialVersionUID建议自定义,如果不自定义会使用默认的计算规则,而计算依赖于Java的编译实现,可能会导致发送方和接收方的不一致。不一致会抛出linkInvalidClassException异常。并且建议定义成private的
    private static final long serialVersionUID = 42L;
  7. 数组类没有serialVersionUID.

继续阅读“Java的Serializable接口”

用几个简单例子理解Java的泛型并用好他

前几天和小伙伴在食堂吃饭时,正好说到了泛型,再把泛型的几个要素总结下,下面用几个简单的例子说明下,如何用好泛型。

泛型的定义

这个大家应该都不陌生,泛型是在Java1.5之后引入的,字面定义是: 声明中,具有一个或者多个类型参数的类或者接口,就是泛型类或者接口。构成格式是,类或者接口,接着用<>尖括号把对应于泛型形式类型参数的实际类型参数列表括起来。例如List\就是泛型,List就是原生态类型,而每一个泛型都对应着这么一个原生态类型。

继续阅读“用几个简单例子理解Java的泛型并用好他”

Spring boot访问js、css、图片(img)访问404无法访问的问题

问题: 今天在使用spring boot的时候,我按照spring boot的要求将css、js、图片放在规定的/src/main/resource/public/js下面,却怎么也访问不到,报的是404错误,在查找资料无果后,经过反复的实验,终于找到了问题的解决方法.

继续阅读“Spring boot访问js、css、图片(img)访问404无法访问的问题”

介绍spring的两个接口ApplicationContextAware和ApplicationListener

最近忙于双11的项目,没日没夜的,慌于学业,实在是惭愧,今天好不容易有点时间,看了些源码,有了些新的知识,记录下来,以备以后使用.

今天要介绍的是spring的org.springframework.context包里的两个接口。spring真是强大,不仅为我们提供了基本的脚手架,并且针对特殊的需求,也开放了很多的接口以满足你特殊的需求。今天要介绍的这两位,一个可以让你在任何时候得到当前的容器,另外一位则可以让你在bean初始化完成之后来做一些自己的业务逻辑。

继续阅读“介绍spring的两个接口ApplicationContextAware和ApplicationListener”

Apache Maven Shade Plugin的用途

maven的shade插件,官方说明如下:

这个插件能把所有的依赖打进一个jar里,形成一个超级jar包,这样做的好处是你打出的jar包可以独立运行,就和你用spring boot打出的jar包一样,拷贝到任何机器上,只要有java环境,jar包就能运行. 还有一个重要作用则是解决冲突的重要手段. 他甚至能够将依赖的jar包里的类解压出来,打进超级jar包的classPath,所以你可以理解的是,他的作用就是把依赖打进jar包。

 

继续阅读“Apache Maven Shade Plugin的用途”

Spring boot的controller无法生效404的原因

我记得我不止一次遇到这个问题了,按照要求定义了controller,始终就是404,上一次的原因我已经不大记得了,这次又遇到就好好查一查。

先搜索引擎一遍,发现大家都遇到过404的问题,各种原因都有,这里面当然有各种原因,最关键的是没有任何错误日志导致问题非常的难查。

一般情况,如果有内部错误或者有致命的异常都会导致404.但是我一个Controller非常的简单,没有任何逻辑,也没有任何错误日志,让人非常的迷茫。

 

继续阅读“Spring boot的controller无法生效404的原因”

使用Spring Boot框架的时候怎么用JDBC连接MySql数据库

今天学习使用Spring Boot框架的时候连接线上数据库,Accessing Relational Data using JDBC with Spring,如果按照这个tutorial可以在15分钟之内完成数据库的连接。然而这个连接的仅仅是本地的一个数据库,Spring Boot spots H2,是一个本地内存级的关系数据库。我们要连接的是线上已存在的mysql,该怎么做呢? 在网上也看到很多人遇到和我相同的问题,所以记录一下,希望对你有帮助。

继续阅读“使用Spring Boot框架的时候怎么用JDBC连接MySql数据库”