繁体   English   中英

如何@autowire一些bean进入JsonSerializer?

[英]How to @autowire some bean into JsonSerializer?

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

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

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

}

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

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

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

解决办法是SpringBeanAutowiringSupport如果你正在使用Spring框架2.5+。

public class DesignSerializer extends JsonSerializer<Design> {

    @Autowired
        IDesignService designService;
    }

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

...

}

我希望能帮助你

我们遇到了与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(..));
    }
}

我通过在另一个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与静态字段一起使用吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM