域上标注了@Autowired时,如果服务没有注册,则启动时会报错:
..... could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
这其实不是错误,而是服务实现类不在当前应用中(需要rpc调用),如何改造能够在自动装配找不到bean时,创建一个动态代理类并注入呢(在这个代理类中执行rpc调用)?
springboot好复杂啊,了解太少无处下手,谢谢!
你为什么不直接定义一个被Spring Bean容器管理的servic呢,在service里面处理rpc调用就可以了,使用@Autowired注入这个service
@fatal_error 在所有接口的实现类里加这种处理吗?一是重复的代码侵入了业务,不希望在业务代码中写这些业务无关的处理,而且有时实现类可能不在当前应用中。如果为所有接口都创建一个代理类,对可以直接注入的是不必要的
@x060508 无关的,不一定需要完整的微服务架构。解决这个问题就得熟悉springboot,找到合适的扩展点
《我的方案》
我已经解决了:写一个类实现BeanPostProcessor接口,重写postProcessAfterInitialization方法,每个Bean都会走这里初始化,找到@Autowired的域,如果这个域有对应的bean,则由本地bean处理,并注册为dubbo或hessian服务以供远程调用;如果这个域对应的bean没有无法自动注入,则创建hessian的代理类注入,或者注册为dubbo的消费者。
服务降级 熔断机制?????