berg369
2020-04-30 16:34
采纳率: 63.2%
浏览 875
已采纳

springboot高手请进,如何在@Autowired找不到Bean时自动创建一个代理类?

域上标注了@Autowired时,如果服务没有注册,则启动时会报错:

..... could not be found.
The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)

这其实不是错误,而是服务实现类不在当前应用中(需要rpc调用),如何改造能够在自动装配找不到bean时,创建一个动态代理类并注入呢(在这个代理类中执行rpc调用)?
springboot好复杂啊,了解太少无处下手,谢谢!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • Fatal Error 2020-04-30 17:50
    已采纳

    你为什么不直接定义一个被Spring Bean容器管理的servic呢,在service里面处理rpc调用就可以了,使用@Autowired注入这个service

    点赞 评论
  • berg369 2020-05-01 05:13

    @fatal_error 在所有接口的实现类里加这种处理吗?一是重复的代码侵入了业务,不希望在业务代码中写这些业务无关的处理,而且有时实现类可能不在当前应用中。如果为所有接口都创建一个代理类,对可以直接注入的是不必要的
    @x060508 无关的,不一定需要完整的微服务架构。解决这个问题就得熟悉springboot,找到合适的扩展点

    《我的方案》

    我已经解决了:写一个类实现BeanPostProcessor接口,重写postProcessAfterInitialization方法,每个Bean都会走这里初始化,找到@Autowired的域,如果这个域有对应的bean,则由本地bean处理,并注册为dubbo或hessian服务以供远程调用;如果这个域对应的bean没有无法自动注入,则创建hessian的代理类注入,或者注册为dubbo的消费者。

    点赞 评论
  • x060508 2020-05-05 17:13

    服务降级 熔断机制?????

    点赞 评论

相关推荐 更多相似问题