Autowire反序列化类 [英] Autowire in deserialization class

查看:76
本文介绍了Autowire反序列化类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在反序列化类内部自动布线?

How to autowire inside deserialization class?

这是映射类:

@Component
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonNaming(PropertyNamingStrategy.PascalCaseStrategy.class)
public class Container {


    @Autowired
    private CalcResourceUsage calcResourcePercentage;
    private ContainerStats containerStats;
    @Autowired
    private AverageResourceUsage averageResourceUsage;

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


    private String Id;


    private List<String> Names;

    public String getId() {
        return Id;
    }

    public void setId(String id) {
        Id = id;
    }

    public List<String> getNames() {
        return Names;
    }

    public void setNames(List<String> names) {
        Names = names;
    }

    public CalcResourceUsage getCalcResourcePercentage() {
        return calcResourcePercentage;
    }


    public AverageResourceUsage getAverageResourceUsage() {
        return averageResourceUsage;
    }

    public ContainerStats getContainerStats() {
        return containerStats;
    }

    public void setContainerStats(ContainerStats containerStats) {
        this.containerStats = containerStats;
    }
}

因此,我使用杰克逊使用以下代码行将对象映射到此类中:

So I use jackson to map objects into this class, using this line of code:

Container[] containers = syncRestTemplate.getForObject(address + "json", Container[].class);

然后我有一个数组,其中需要为每个容器进行一些计算,如果可以自动连接CalcResourceUsageAverageResourceUsage,则可以为每个容器进行一些计算.

Then I have an array where for each container I need to do some calculations and if I can autowire CalcResourceUsage and AverageResourceUsage, I can do some calculations for each container.

当前getAverageResourceUsage()getCalcResourcePercentage()返回null

推荐答案

您可以将反序列化的对象传递给AutowireCapableBeanFactory进行布线(使用autowireBean()方法).

You can pass the deserialized objects to AutowireCapableBeanFactory for wiring (use autowireBean() method).

示例:

@Autowired
private AutowireCapableBeanFactory beanFactory;

public void doDeserialization() {

   Container[] containers = // get them via jackson
   for (Container container : containers) {
      beanFactory.autowireBean(container);
      // container will now have its dependencies autowired.
   }
}

这篇关于Autowire反序列化类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆