开启热加载后,servlet初次使用会调用init()方法,开启热加载,更新的servlet代码后,并不执行init()方法,进一步说是不执行构造方法,等于未创建对象,但是对service方法中修改的代码可以自动更新。不知道原因。
有个猜测,因为热加载后未调用init和构造方法,那么servlet还是原来的对象,但是方法区已经给刷新了,那么构建的对象如果还是去方法区找方法运行的话就会刷新,而如果是servlet类本身有个字符串,在更改后,却是不变的(测试过确实不会改变),我猜测是只刷新了方法区内容,因为本身没有建立新对象,因此类属性的字符串还是初次构建时的内容。其实init与destroy一个servlet只会调用一次,热加载本质是在刷新方法区