当前位置: 首页> 财经> 产业 > 泰安房产交易网_企业服务网站_百度发广告怎么发_提交网站收录入口

泰安房产交易网_企业服务网站_百度发广告怎么发_提交网站收录入口

时间:2025/8/26 1:54:20来源:https://blog.csdn.net/qq_30166465/article/details/144558312 浏览次数:0次
泰安房产交易网_企业服务网站_百度发广告怎么发_提交网站收录入口

问题

  1. 在有些情况下,我们需要让某个类依赖到一个spring bean,那么常用的方式就是将这个类加上@Componet注解注册为spring bean。
  2. 但是有些情况下,如果这个类是个第三方的组件,就不会起作用,比如说Jackson库里,我实现一个自定义的反序列化器MyDeserializer,让它实现JsonDeserializer,这个自定义的MyDeserializer需要依赖一个Service,那么给MyDeserializer添加注解@Componet并不会生效。

解决

将MyDeserializer依赖的bean定义为 static,并写一个static方法手动set这个bean,set的时机在一个配置类的@PostConstruct中。

示例代码

需要依赖的类

public class MyDeserializer extends JsonDeserializer<String> {private static KeyManagementService keyManagementService;public static void setKeyManagementService(KeyManagementService service) {keyManagementService = service;}@Overridepublic String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {String encryptedContent = jsonParser.getText();return keyManagementService.decrypt(encryptedContent);}
}

配置类

@Configuration
public class JacksonConfig {@ResourceKeyManagementService keyManagementService;@PostConstructvoid init() {MyDeserializer.setKeyManagementService(keyManagementService);}
}

也可以不用配置类,直接在KeyManagementService的初始化块(也就是@PostConstruct方法)中加上MyDeserializer.setKeyManagementService(this);

额外引发的问题-bean加载顺序导致空指针

有可能在static类型的依赖还没有被注入到MyDeserializer里,MyDeserializer就会被调用,这时候有可能会产生空指针,怎么办呢?

调整bean的加载顺序
如果某个TempService在初始化的时候就会用到MyDeserializer,这时候MyDeserializerstatic依赖还没有被注入,也就是说JacksonConfig类的@PostConstruct方法还没执行。那么就应该保证让JacksonConfigTempService之前先完成初始化。
方法就是,在TempService上标注@DependsOn("jacksonConfig")

关键字:泰安房产交易网_企业服务网站_百度发广告怎么发_提交网站收录入口

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: