首页 > 解决方案 > 反序列化后有没有办法在承包商之后调用方法

问题描述

我反序列化了一个 json,然后想在构造函数之后通过注释或其他方式调用 postProcess 方法?

.json 文件:

{
  "type": "storeType",
  "name": "store-name",
  "list": [
    {
      "type": "itemType",
      "name": "item1-name",
    },
    {
      "type": "itemType",
      "name": "item2-name",
    }
  ]
}

存储类:

 Store extends AbstractClass{

    @Value("${store.size:100000}")
    private Integer size;
    @Autowired
    private StorePersistency persistency;

    private String name;
    private List<abstractClass> list;

    public Store(@JsonProperty("name") String name, @JsonProperty("list") list) {
        this.name=name;
        this.list=list;
    }

   @Override
   public postProcess(){
     ...
   }
}

项目类:

 Item extends AbstractClass{

    private String name;

    public Store(@JsonProperty("name") String name) {
        this.name=name;
    }

   @Override
   public postProcess(){
     ...
   }
}

解串器服务:

AbstractClass clzz = objectMapper.readValue(jsonFile, AbstractClass.class)

目的是通过在 postProcess 方法中调用 authowireService 来 @authowire 和 @value 其他类字段(StorePersistency 和 size)。

授权服务:

public void authowireBean(Class clzz){
   applicationContext.getAutowireCapableBeanFactory().autowireBeanProperties(clzz, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true);
}

标签: javajsonspringjacksondeserialization

解决方案


您绝对应该POJO从持久性和服务层中解耦。对于持久层,您可以使用在您的情况下可能由类表示的DAO 模式。StorePersistency您需要创建实现postProcess. 有关更多信息,请参阅服务和 DAO 层的职责和使用。您的案例中的示例服务层可能如下所示:

@Component
class StoreService {

    @Value("${store.size:100000}")
    private Integer size;

    @Autowired
    private StorePersistency persistency;

    public postProcess(Store store) {
       ...
    }
}

推荐阅读