在一個(gè)類中@Configurationpublic class MyConfig{ @bean(“d1”)
Datasource getDataSource(){
DruidDataSource d1 = new DruidDataSource();
... return d1;
}
}然后另一個(gè)類中:@Configurationpublic class SecondConfig{ @Resource(name="d1")
Datasource dataSource;
...
}發(fā)現(xiàn)不行,為何?
2 回答

翻翻過去那場(chǎng)雪
TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
@Bean(name = "d1")Datasource getDataSource(){ DruidDataSource d1 = new DruidDataSource(); // ... return d1; }
你注解里有寫標(biāo)識(shí)嗎,沒有的話默認(rèn)是返回類型首字母小寫的字面值,比如: "dataSource"
。

30秒到達(dá)戰(zhàn)場(chǎng)
TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
你的 @Resource(name="d1")
指定了 bean 的 name 為 d1,這樣在注入的 bean 的時(shí)候就回去尋找Datasource 類的名為 d1 的實(shí)現(xiàn),然而發(fā)現(xiàn) ioc 容器內(nèi)并沒有這個(gè) bean。
現(xiàn)在有兩種辦法:
一是直接去掉 name=d1 的指定,改寫為 @Resource
,這樣就會(huì)根據(jù)類型去匹配;
二是在聲明 bean 的時(shí)候,指定這個(gè) bean 的 name 為 d1,如 @Bean(name="d1")
我記得默認(rèn)使用 @Bean
注解生成的 bean 的名稱和方法名同名,也就是你可以
@bean Datasource d1(){ DruidDataSource d1 = new DruidDataSource(); ... return d1; }
添加回答
舉報(bào)
0/150
提交
取消