如何@autowire一些bean进入JsonSerializer?

我在我的网络应用程序中使用延迟加载与hibernate。

我想在服务器响应的解析阶段从数据库加载一些对象

@Component public class DesignSerializer extends JsonSerializer { @Autowired IDesignService designService; <-- is null 

}

这是完全可以理解的,因为DesignSerializer正在使用每个对象的“new”运算符进行实例化。

我确信有一种方法可以在创建时将bean注入该序列化程序,我只是不知道如何。

你们能帮助我或指出我正确的方向吗?

如果您使用的是Spring Framework 2.5+,则解决方案是SpringBeanAutowiringSupport。

 public class DesignSerializer extends JsonSerializer { @Autowired IDesignService designService; } public DesignSerializer(){ SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); } ... } 

我希望能帮助你

我们遇到了与JsonSerializer和Spring自动assembly相同的问题。 对我们有用的解决方案是制作两个构造函数。 一个用于Spring,它将依赖关系设置为静态字段,另一个用于Jackson初始化。

这是有效的,因为Springdependency injection(自动assembly)发生在Jackson初始化序列化器之前。

 @Component public class MyCustomSerializer extends JsonSerializer { private static IDesignService designService; // Required by Jackson annotation to instantiate the serializer public MyCustomSerializer() { } @Autowired public MyCustomSerializer(IDesignService designService) { this.designService = designService; } @Override public void serialize(String m, JsonGenerator gen, SerializerProvider s) { gen.writeObject(MyCustomSerializer.designService.method(..)); } } 

我通过在另一个bean中创建静态字段然后@Autowire其setter方法解决了这个问题。

 @Service("ToolBox") @Transactional public class ToolBox { static Logger logger = Logger.getLogger(ToolBox.class); private static IService service; @Autowired public void setService(IService service) { ToolBox.service = service; } public static IService getService() { return ToolBox.service; }} 

如此线程所示: 你可以将@Autowired与静态字段一起使用吗?