Is there a way to call method after contractor after deserializion

早过忘川 提交于 2019-12-24 21:51:02

问题


I deserialize a json and want then to call postProcess method by annotation or another way after constractor?

json file:

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

Store.class:

 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.class:

 Item extends AbstractClass{

    private String name;

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

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

deserializerService:

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

The purpose is to @authowire and @value other class fields (StorePersistency and size) by calling a authowireService in postProcess method.

AuthowireService:

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

回答1:


You should definitely decouple POJO from persistence and service layers. For persistence layer you could use DAO pattern which is probably represented by StorePersistency class in your case. You need to create service layer which implement postProcess. See Responsibilities and use of Service and DAO Layers for more info. Example service layer in your case could look like below:

@Component
class StoreService {

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

    @Autowired
    private StorePersistency persistency;

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


来源:https://stackoverflow.com/questions/57753753/is-there-a-way-to-call-method-after-contractor-after-deserializion

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