Java 会话作用域bean序列化自动连线问题

Java 会话作用域bean序列化自动连线问题,java,spring,redis,jackson,spring-session,Java,Spring,Redis,Jackson,Spring Session,我有一套简单的两粒豆子 @Service @Scope(scopeName = "session", proxyMode = ScopedProxyMode.TARGET_CLASS) public class CartServiceImpl implements Serializable { private ProductService productService; @Autowired public CartService(ProductServic

我有一套简单的两粒豆子

@Service
@Scope(scopeName = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class CartServiceImpl implements Serializable {

      private ProductService productService;

      @Autowired
      public CartService(ProductService productService) {
            this.productService = productService;
      }

}

public interface ProductService {
    // some methods
}

@Service
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS)
public class ProductServiceImpl implements ProductService {
    // some logic
}
我使用带Redis的Spring会话来存储会话数据。如果我使用标准Java序列化,所有这些都可以正常工作,但是如果我尝试添加
GenericJackson2JsonRedisSerializer
,我在本文中得到了如下Jackson序列化异常。为什么我会这样?我如何理解Jackson应该支持代理bean序列化。怎么了

另外,我知道关于瞬态和JsonIgnore的事。这不是他们的情况

找不到类org.springframework.context.expression.StandardBeanExpressionResolver的序列化程序,也找不到创建BeanSerializer的属性(为避免异常,请在空Bean上禁用SerializationFeature.FAIL_)(通过引用链:ru.geekbrains.service.CartServiceImpl[“productService”]->ru.geekbrains.service.ProductServiceImpl$$EnhancerBySpringCGLIB$$b87663be[“targetSource”]->org.springframework.aop.target.SimpleBanTargetSource[“beanFactory”]->org.springframework.beans.factory.support.DefaultListableBeanFactory[“BeanPressionResolver”];嵌套异常为com.fasterxml.jackson.databind.exc.InvalidDefinitionException:找不到类org.springframework.context.expression.StandardBeanExpressionResolver的序列化程序,也找不到创建BeanSerializer的属性(为避免异常,请禁用SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用链:ru.geekbrains.service.CartServiceImpl[“productService”]->ru.geekbrains.service.ProductServiceImpl$$EnhancerBySpringCGLIB$$b87663be[“targetSource”]->org.springframework.aop.target.SimpleBanTargetSource[“beanFactory”]->.springframework.beans.factory.support.DefaultListableBeanFactory[“BeanPressionResolver”])


*服务
类不是常规的
POJO
类。
Jackson
尝试查找给定类的
获取者
/
字段
,如果默认情况下没有字段,则会抛出异常。您可以禁用
序列化功能。在空bean
功能上失败,并允许写入空
{
objects。但是为什么要存储这些实例?它们存储状态吗?是的。我想要一种有状态的spring bean。看起来spring中的这种bean必须像纯DAO类。如果我错了,那很好。)这通常是个坏主意,如果你没有好的理由,就不要这样做。更好的方法是使用一个方法返回这个
状态
,并直接序列化它。在另一种情况下,您需要为服务类实现自定义序列化器/反序列化器。很可能您是对的。看起来会话范围的Springbean应该尽可能简单。没有任何注射等。