devtools 导致 相同类型强转失败

在使用shiro的session存取对象的时候,发现取对象强转会失败,即便是User类型转User类型也会失败。

出现这种问题的原因是这两个对象的ClassLoader不同导致的(如果同一类型的对象的ClassLoader不同,强制转换也是会失败的)。

比如说我使用了spring-boot-devtools这个依赖,默认启动的时候会使用RestartClassLoader这个ClassLoader类加载class,但是以jar形式引入的class会使用基础的ClassLoader(也就是AppClassLoader)加载。

对于devtools引起的这个问题可参考使用Spring Boot本地启动,第三方包无法修改项目内静态常量,后来发现devtools实在是不太优雅,转而投奔JRebel了。下面介绍下JRebel在IDEA中的安装使用。

1.到myJRebel中注册一个账号:

myJRebel

2.打开IDEA中的设置页面

Preferences->Plugins->Browse repositories

devtools 导致 相同类型强转失败_第1张图片
屏幕快照 2017-07-21 下午4.33.26.png
devtools 导致 相同类型强转失败_第2张图片
屏幕快照 2017-07-21 下午4.33.17.png

输入JRebel,然后安装即可:

3.安装完成之后重启IDEA

依次选择 Help->JRebel->Activcation
选择第二项,用license激活,这里的Activcation code在你注册完myJRebel之后可以找到:

devtools 导致 相同类型强转失败_第3张图片
屏幕快照 2017-07-21 下午4.20.58.png

4.激活完成后,右击项目根目录

自动添加rebel.xml文件


devtools 导致 相同类型强转失败_第4张图片
屏幕快照 2017-07-21 下午4.35.50.png
5.好了,到此基本完成,点击rebel图标启动工程即可,后面修改的代码会实时部署,不需要再重启。
屏幕快照 2017-07-21 下午4.38.25.png

加油站加盟

你可能感兴趣的:(devtools 导致 相同类型强转失败)