`

代码Retry

    博客分类:
  • Java
 
阅读更多
@Component
public class RetryProxyHandler {

    @Autowired
    private ConfigurableApplicationContext context;

    public Object getProxy(Class clazz) {
        // 1. 从Bean中获取对象
        DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)context.getAutowireCapableBeanFactory();
        Map<String, Object> beans = beanFactory.getBeansOfType(clazz);
        Set<Map.Entry<String, Object>> entries = beans.entrySet();
        if (entries.size() <= 0){
            throw new ProxyBeanNotFoundException();
        }
        // 如果有多个候选bean, 判断其中是否有代理bean
        Object bean = null;
        if (entries.size() > 1){
            for (Map.Entry<String, Object> entry : entries) {
                if (entry.getKey().contains(PROXY_BEAN_SUFFIX)){
                    bean = entry.getValue();
                }
            };
            if (bean != null){
                return bean;
            }
            throw new ProxyBeanNotSingleException();
        }

        Object source = beans.entrySet().iterator().next().getValue();
        Object source = beans.entrySet().iterator().next().getValue();

        // 2. 判断该对象的代理对象是否存在
        String proxyBeanName = clazz.getSimpleName() + PROXY_BEAN_SUFFIX;
        Boolean exist = beanFactory.containsBean(proxyBeanName);
        if (exist) {
            bean = beanFactory.getBean(proxyBeanName);
            return bean;
        }

        // 3. 不存在则生成代理对象
        bean = RetryInvocationHandler.getProxy(source);

        // 4. 将bean注入spring容器
        beanFactory.registerSingleton(proxyBeanName, bean);
        return bean;
    }
}
复制

作者:弗兰克的猫
链接:https://juejin.im/post/5d50b663e51d4561c75f27dc
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

分享到:
评论

相关推荐

    重试框架spring-retry以及guava-retry的使用

    4. **异常处理**:Spring Retry的`@Retryable`注解可以指定哪些异常类型触发重试,而Guava Retry需要通过`Predicate`来判断是否应重试,这可能需要编写更多的代码。 在`retry-starter`项目中,你可以看到这两种重试...

    python——retry装饰器(csdn)————程序.pdf

    Python 语言中,retry 装饰器是一种非常有用的机制,能够帮助开发者在编写代码时,轻松地实现函数的重试机制。本文将对 Python 中的 retry 装饰器进行详细的讲解,包括其定义、使用方法、优点和实际应用场景。 ...

    Java开发案例-springboot-64-整合Guava-Retry实现重试-源代码+文档.rar

    Java开发案例-springboot-64-整合Guava-Retry实现重试-源代码+文档.rar Java开发案例-springboot-64-整合Guava-Retry实现重试-源代码+文档.rar Java开发案例-springboot-64-整合Guava-Retry实现重试-源代码+文档.rar...

    Java开发案例-springboot-37-整合spring-retry实现服务重试-源代码+文档.rar

    Java开发案例-springboot-37-整合spring-retry实现服务重试-源代码+文档.rar Java开发案例-springboot-37-整合spring-retry实现服务重试-源代码+文档.rar Java开发案例-springboot-37-整合spring-retry实现服务重试-...

    spring-retry,.zip

    《Spring Retry:构建健壮应用的关键技术》 在软件开发中,尤其是在分布式系统和网络通信中,偶尔出现的错误和异常是无法避免的。Spring Retry是Spring生态系统中的一个开源项目,它提供了声明性的重试支持,帮助...

    前端开源库-axios-retry

    在压缩包`axios-retry-master`中,包含了axios-retry库的源代码、文档、示例以及测试用例。通过阅读源代码,开发者可以深入了解其工作原理,以便更好地利用这个工具解决实际问题。同时,文档部分提供了详细的使用...

    springboot基于spring-retry实现重试机制

    在上面的代码中,`@Retryable` 注解指定了重试策略:当方法抛出任何类型的异常时,最多尝试 5 次,每次失败后等待 2 秒再重试。`@Recover` 注解定义了在所有重试失败后执行的回退逻辑。 对于更复杂的重试场景,可以...

    开源项目-shafreeck-retry.zip

    1. **源代码**:在retry-master文件夹下,我们可以找到项目的源代码。这些代码包含了重试逻辑的核心实现,可能包括了不同类型的重试策略(例如固定间隔、指数退避等)以及与业务代码集成的接口。开发者可以通过引入...

    前端开源库-superagent-retry

    然后在你的代码中引入并使用: ```javascript const request = require('superagent'); require('superagent-retry')(request); request .get('http://example.com/api') .retry(3) // 设置最多重试3次 .end(...

    kotlin-retry,用于重试可能失败的操作的高阶函数。.zip

    这些工具可以帮助开发者更灵活地定制重试逻辑,使得代码更加简洁且易于维护。 总之,Kotlin-retry是一个强大的工具,能够帮助开发者处理那些可能失败的操作,提高程序的健壮性。通过了解和掌握它的使用,我们可以...

    js代码-Retry Promise实现

    在这种情况下,我们可以使用Retry策略,即在第一次尝试失败后再次尝试,直到达到预设的重试次数或者操作成功为止。本教程将详细介绍如何使用Promise来实现一个Retry机制。 首先,我们需要创建一个函数,这个函数...

    retry-demo.rar

    博客文章链接提供了更详细的解释和实现步骤,包括如何配置Spring Boot项目,添加依赖,以及如何在业务代码中使用@Retryable注解来标记需要重试的方法。 在实际开发中,使用Spring Retry可以显著提高服务的健壮性和...

    retry:Rust库重试一些代码,直到其返回值满足条件为止

    在Rust编程语言中,`retry`库是一...总之,`retry`库是Rust生态系统中一个强大的工具,它使得处理可能会失败的代码更加方便,同时提高了代码的健壮性。合理利用`retry`,可以显著提升你的Rust应用的稳定性和用户体验。

    perl5-Test-Retry:重试代码块几次,直到测试功能成功

    Test :: Retry提供重试代码的功能,直到测试成功(具有重试限制)。 例如,对于涉及I / O并需要等待一段时间才能通过的测试很有用。 输入 Test :: Retry导出一个函数,即retry_test 。 use此模块

    guava-retry jar包

    在实际项目中,Guava Retry与Guava的其他组件结合使用,可以极大地提升代码的稳定性和可维护性。 至于`guava-retry2.0`,这可能是Guava Retry的一个特定版本。通常,版本号的升级会带来性能优化、新特性的添加或...

    retry:重试类在可重试的条件下重新运行代码,基于异常

    // Anon function$ retry = new Retry ( function () { return 42 ; });// Outputs 42echo $ retry (); 您可以在 Retry 类的构造时间配置异常以侦听重试、重试次数和重试之间的时间(以毫秒为单位)。 默认情况下,...

    Amp-retry.zip

    "Amp-retry.zip"中的"retry-master"目录可能包含了实现重试逻辑的代码。在异步编程中,由于网络不稳定、服务暂时不可用等原因,某些操作可能会失败。这时,重试机制就显得尤为重要。Amp框架提供了便捷的方式来实现这...

    小程序授权拒绝后重新拉起授权窗口

    使用场景 以默认quick_start项目为例,当用户同意获取头像与昵称时应当是这样的界面 ...retry: function () { wx.openSetting({ success: function (res) { // 这里重新调用代码,比如这里的重新显示头像昵称

    smart-retry:Smart Retry主要是用来进行任务重试的。和Guava Retry、Spring Retry相比,Smart Retry最大的特点是异步重试,支持持久化,系统重启之后可以继续重试

    Smart RetrySmart Retry主要是用来进行方法重试的。和Guava Retry、Spring Retry相比,Smart Retry最大的特点是异步重试,支持持久化,系统重启...但这样会增加工作量,增加很多冗余的代码。Smart Retry在这种背景下应

Global site tag (gtag.js) - Google Analytics