Autowire in deserialization class

陌路散爱 提交于 2019-12-11 02:28:43

问题


How to autowire inside deserialization class?

Here is the mapping 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);

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.

currently getAverageResourceUsage() and getCalcResourcePercentage() return null


回答1:


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

Example:

@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.
   }
}


来源:https://stackoverflow.com/questions/35436279/autowire-in-deserialization-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!