因为代理原因导致的NotSerializableException

  错误信息:
  NotSerializableException
  Failed to serialize object
  Proxy
 
  报这个错,一开始就往没有序列化这一块想,可是报错点是:
  excelTableService.sendMessage(smsService,userSession,procInstance,type,cipConfigFile);
 
  这个函数的参数都是有值的。而且这个方法是ServiceBean,本身报错的类又是一个Controller,也是一个Bean,能序列化吗?
  最后试着都加了序列化,仍然报错。
 
 
  错误的原因并不是没有序列化,而是代理的问题。
 
  我们以springMVC的逻辑来想:通过了Controller注入了一个Service,然后又调用了一个另一个Service的方法,把前一个Service当做参数传递进去了。这本身是不是不合逻辑的。在Contriller中注入Service使用的代理,将这个代理再传回Service中,就会获取不到了。
 
  看原来的代码中的方法:
@SuppressWarnings("unchecked")
public void sendMessage(SmsService smsService,
                        UserSession userSession,
                        ProcInstance procInstance,
                        String type, String cipConfigFile) throws IOException {
}

 

  在这个Service中,本来可以直接注入SmsService,和UserSession 这些值的,并不需要从外部传递过来。更改这个Service中的方法后,果然没有了问题。
 
  原创文章,欢迎转载,转载请注明出处!
 

原文地址:https://www.cnblogs.com/acm-bingzi/p/notSerializableException.html