弹簧自注入

我在Spring 3.x中尝试了以下代码,但失败了BeanNotFoundException,它应该根据我之前提出的问题的答案- 我可以使用Spring注入相同的类吗?


@Service

public 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)}


宝慕林4294392
浏览 668回答 3
3回答

慕村225694

此代码也适用:@Servicepublic 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。但是我不知道,只是猜测。无论如何,好问题。

缥缈止盈

鉴于以上代码,我看不到循环依赖性。您将某些Service实例注入UserService。注入的Service的实现不一定需要是另一个UserService,因此不存在循环依赖性。我不明白为什么要将UserService注入UserService,但我希望这是一种理论上的尝试。
打开App,查看更多内容
随时随地看视频慕课网APP