Reputation: 786
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
Upvotes: 2
Views: 2441
Reputation: 746
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.
}
}
Upvotes: 1