美文网首页
静态方法引用spring对象&原理

静态方法引用spring对象&原理

作者: FantJ | 来源:发表于2022-05-27 15:54 被阅读0次

    一些工具类可能需要依赖spring注解,为了方便可以把工具方法做成静态方法。我常用的工具有分布式锁、环境判断、日志跨系统传输...

    实现

    方式一:通过@PostConstruct注解实现

    @Component
    public class RuleLogUtils {
    
        @Resource
        private RuleMetaqProvider ruleMetaqProvider;
    
        @Resource
        private RulePropertiesConfig rulePropertiesConfig;
    
        public static RuleLogUtils ruleLogUtils;
    
    
        @PostConstruct
        public void init() {
            ruleLogUtils = this;
            ruleLogUtils.ruleMetaqProvider = this.ruleMetaqProvider;
            ruleLogUtils.rulePropertiesConfig = this.rulePropertiesConfig;
        }
    
    ...
    ...
       ruleLogUtils.ruleMetaqProvider.sendMsg(RuleTopicEnum.RULE_LOG_TOPIC, JSON.toJSONString(ruleLogDTO));
    

    方式二:通过实现bean初始化接口实现

    覆盖bean的初始化后的方法,将代理对象传递到工具类。

    实现BeanPostProcessor接口、声明@Bean注解的init方法、实现InitializingBean接口 等等,能在bean初始化后运行的都可以。

    原理

    在静态方法中想要调用spring对象,主要解决的问题就是能够在spring对象加载完成后,再将spring的动态代理对象赋值给静态对象(注意这里一定要是spring的代理对象),就可以实现了。

    @PostConstruct虽然说是jdk内部注解,spring对该注解也进行了支持和扩展,会在bean初始化阶段去反射调用带有该注解的方法;方式二也类似。

    相关文章

      网友评论

          本文标题:静态方法引用spring对象&原理

          本文链接:https://www.haomeiwen.com/subject/jnamprtx.html