servicecomb-java-chassis
servicecomb-java-chassis copied to clipboard
@RpcReference注解在某些场景会失效
针对这个@RpcReference失效的bean进行debug定位,发现初始化,执行到applyBeanPostProcessorsBeforeInitialization时,对应的RpcReferenceProcessor还没有被registerBeanPostProcessors注册上,能否提高一点RpcReferenceProcessor注册的优先级,比如实现PriorityOrdered接口,确保RpcReferenceProcessor更早一点注册,避免时序问题导致部分@RpcReference失效。
能提供下具体的写法代码吗?
我提供一个Demo吧,三个类: 接口类:
public interface DemoInterface {
void test();
}
接口实现类:
@Service
public class DemoInterfaceImpl implements DemoInterface {
@RpcReference(microserviceName = "DemoService", schemaId = "demo-api")
private IDemoService demoService;
@Override
public void test() {
System.out.println("test");
}
}
DemoBean类实现FactoryBean,并且通过构造函数注入上述的DemoInterfaceImpl
@Service
public class DemoBean implements FactoryBean<String> {
@Setter
private DemoInterface demoInterface;
@Autowired
public DemoBean(DemoInterface demoInterface) {
this.demoInterface = demoInterface;
}
@Override
public String getObject() {
return "demoBean";
}
@Override
public Class<?> getObjectType() {
return String.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
最后出现的问题就是接口实现类DemoInterfaceImpl里的@RpcReference注解不生效
能提供下具体的写法代码吗?
Demo代码已经提供,可以看看是否有问题。
感觉这个不是一个合理的使用场景。 FactoryBean 的加载时机比一般的普通 Bean 早, 你的例子中 DemoBean 依赖了 DemoInterface , 导致了 DemoInterfaceImpl 被提前加载, 而这个时候, Spring 的 BeanPostProcessor 都还未初始化。
印象中 Spring 新版本对这种请都会打印警告的。