java - 反序列化后有没有办法在承包商之后调用方法
问题描述
我反序列化了一个 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);
}
解决方案
您绝对应该POJO
从持久性和服务层中解耦。对于持久层,您可以使用在您的情况下可能由类表示的DAO 模式。StorePersistency
您需要创建实现postProcess
. 有关更多信息,请参阅服务和 DAO 层的职责和使用。您的案例中的示例服务层可能如下所示:
@Component
class StoreService {
@Value("${store.size:100000}")
private Integer size;
@Autowired
private StorePersistency persistency;
public postProcess(Store store) {
...
}
}
推荐阅读
- spring-boot - 何时生成访问令牌以及如何管理它?
- javascript - 使用 Flask 完成 ajax 后平滑滚动页面
- vue.js - 如何从组件/模板中获取当前的 nuxt 布局?
- ruby-on-rails - 如何在 RSpec 中模拟块参数?
- python - 绘制具有 x 和 y 方向范围的线
- python - 删除combination_combination数组上的重复对
- git - 我需要在每次启动时重新运行 eval(ssh-agent) 和 ssh-add
- flutter - flutter show open with dialog for map applications
- c - 小型查找表与 if-else 和性能
- typescript - 使用 MongoDB 存储历史信息的最佳方式?