如何将一些bean@autowire到JsonSerializer中?

2022-09-01 16:50:35

我正在我的Web应用程序中使用带有休眠的延迟加载。

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

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

}

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

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

你们能帮帮我,或者给我指出正确的方向吗?


答案 1

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

public class DesignSerializer extends JsonSerializer<Design> {

    @Autowired
        IDesignService designService;
    }

    public DesignSerializer(){
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);    
    }

...

}

我希望对您有所帮助


答案 2

我们在JsonSerializer和Spring自动布线方面遇到了同样的问题。对我们有用的解决方案是创建两个构造函数。一个用于Spring,它将依赖项设置为静态字段,另一个由Jackson初始化使用。

这是有效的,因为 Spring 依赖关系注入(自动布线)发生在 Jackson 初始化序列化程序之前。

@Component
public class MyCustomSerializer extends JsonSerializer<String> {

    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(..));
    }
}

推荐