簡體   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