我在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。
但是我不知道,只是猜测。无论如何,好问题。
缥缈止盈
TA贡献2041条经验 获得超4个赞
鉴于以上代码,我看不到循环依赖性。您将某些Service实例注入UserService。注入的Service的实现不一定需要是另一个UserService,因此不存在循环依赖性。
我不明白为什么要将UserService注入UserService,但我希望这是一种理论上的尝试。
添加回答
举报
0/150
提交
取消