寶慕林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。
但是我不知道,只是猜測。無論如何,好問題。

縹緲止盈
TA貢獻2041條經驗 獲得超4個贊
鑒于以上代碼,我看不到循環依賴性。您將某些Service實例注入UserService。注入的Service的實現不一定需要是另一個UserService,因此不存在循環依賴性。
我不明白為什么要將UserService注入UserService,但我希望這是一種理論上的嘗試。
添加回答
舉報
0/150
提交
取消