为了账号安全,请及时绑定邮箱和手机立即绑定

弹簧自注入

弹簧自注入

宝慕林4294392 2019-10-28 16:58:33
我在Spring 3.x中尝试了以下代码,但失败了BeanNotFoundException,它应该根据我之前提出的问题的答案- 我可以使用Spring注入相同的类吗?@Servicepublic class UserService implements Service{    @Autowired    private Service self;}由于我在Java 6中进行了尝试,因此发现以下代码可以正常工作:@Service(value = "someService")public class UserService implements Service{    @Resource(name = "someService")    private Service self;}但我不明白它如何解决循环依赖性。编辑:这是错误消息。OP在对以下答案之一的评论中提到了它:由以下原因引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到依赖项类型为[com.spring.service.Service]的匹配bean:期望至少有1个bean可以作为此依赖项的自动装配候选。依赖项注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

此代码也适用:


@Service

public class UserService implements Service {


    @Autowired

    private ApplicationContext applicationContext;


    private Service self;


    @PostConstruct

    private void init() {

        self = applicationContext.getBean(UserService.class);

    }

}

我不知道为什么,但是似乎Spring可以从ApplicationContextif 创建但未初始化的bean中获取。@Autowired在初始化之前可以工作,并且找不到相同的bean。因此,@Resource也许在@Autowired之前和之后都可以使用@PostConstruct。


但是我不知道,只是猜测。无论如何,好问题。


查看完整回答
反对 回复 2019-10-28
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

鉴于以上代码,我看不到循环依赖性。您将某些Service实例注入UserService。注入的Service的实现不一定需要是另一个UserService,因此不存在循环依赖性。

我不明白为什么要将UserService注入UserService,但我希望这是一种理论上的尝试。


查看完整回答
反对 回复 2019-10-28
  • 3 回答
  • 0 关注
  • 664 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信