@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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
分享到:
相关推荐
4. **异常处理**:Spring Retry的`@Retryable`注解可以指定哪些异常类型触发重试,而Guava Retry需要通过`Predicate`来判断是否应重试,这可能需要编写更多的代码。 在`retry-starter`项目中,你可以看到这两种重试...
Python 语言中,retry 装饰器是一种非常有用的机制,能够帮助开发者在编写代码时,轻松地实现函数的重试机制。本文将对 Python 中的 retry 装饰器进行详细的讲解,包括其定义、使用方法、优点和实际应用场景。 ...
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实现服务重试-...
《Spring Retry:构建健壮应用的关键技术》 在软件开发中,尤其是在分布式系统和网络通信中,偶尔出现的错误和异常是无法避免的。Spring Retry是Spring生态系统中的一个开源项目,它提供了声明性的重试支持,帮助...
在压缩包`axios-retry-master`中,包含了axios-retry库的源代码、文档、示例以及测试用例。通过阅读源代码,开发者可以深入了解其工作原理,以便更好地利用这个工具解决实际问题。同时,文档部分提供了详细的使用...
在上面的代码中,`@Retryable` 注解指定了重试策略:当方法抛出任何类型的异常时,最多尝试 5 次,每次失败后等待 2 秒再重试。`@Recover` 注解定义了在所有重试失败后执行的回退逻辑。 对于更复杂的重试场景,可以...
1. **源代码**:在retry-master文件夹下,我们可以找到项目的源代码。这些代码包含了重试逻辑的核心实现,可能包括了不同类型的重试策略(例如固定间隔、指数退避等)以及与业务代码集成的接口。开发者可以通过引入...
然后在你的代码中引入并使用: ```javascript const request = require('superagent'); require('superagent-retry')(request); request .get('http://example.com/api') .retry(3) // 设置最多重试3次 .end(...
这些工具可以帮助开发者更灵活地定制重试逻辑,使得代码更加简洁且易于维护。 总之,Kotlin-retry是一个强大的工具,能够帮助开发者处理那些可能失败的操作,提高程序的健壮性。通过了解和掌握它的使用,我们可以...
在这种情况下,我们可以使用Retry策略,即在第一次尝试失败后再次尝试,直到达到预设的重试次数或者操作成功为止。本教程将详细介绍如何使用Promise来实现一个Retry机制。 首先,我们需要创建一个函数,这个函数...
博客文章链接提供了更详细的解释和实现步骤,包括如何配置Spring Boot项目,添加依赖,以及如何在业务代码中使用@Retryable注解来标记需要重试的方法。 在实际开发中,使用Spring Retry可以显著提高服务的健壮性和...
在Rust编程语言中,`retry`库是一...总之,`retry`库是Rust生态系统中一个强大的工具,它使得处理可能会失败的代码更加方便,同时提高了代码的健壮性。合理利用`retry`,可以显著提升你的Rust应用的稳定性和用户体验。
Test :: Retry提供重试代码的功能,直到测试成功(具有重试限制)。 例如,对于涉及I / O并需要等待一段时间才能通过的测试很有用。 输入 Test :: Retry导出一个函数,即retry_test 。 use此模块
在实际项目中,Guava Retry与Guava的其他组件结合使用,可以极大地提升代码的稳定性和可维护性。 至于`guava-retry2.0`,这可能是Guava Retry的一个特定版本。通常,版本号的升级会带来性能优化、新特性的添加或...
// Anon function$ retry = new Retry ( function () { return 42 ; });// Outputs 42echo $ retry (); 您可以在 Retry 类的构造时间配置异常以侦听重试、重试次数和重试之间的时间(以毫秒为单位)。 默认情况下,...
"Amp-retry.zip"中的"retry-master"目录可能包含了实现重试逻辑的代码。在异步编程中,由于网络不稳定、服务暂时不可用等原因,某些操作可能会失败。这时,重试机制就显得尤为重要。Amp框架提供了便捷的方式来实现这...
使用场景 以默认quick_start项目为例,当用户同意获取头像与昵称时应当是这样的界面 ...retry: function () { wx.openSetting({ success: function (res) { // 这里重新调用代码,比如这里的重新显示头像昵称
Smart RetrySmart Retry主要是用来进行方法重试的。和Guava Retry、Spring Retry相比,Smart Retry最大的特点是异步重试,支持持久化,系统重启...但这样会增加工作量,增加很多冗余的代码。Smart Retry在这种背景下应