@Resource可以注入@Bean注解的bean吗?

在一个类中

@Configuration
public class MyConfig{

    @bean(“d1”) 
    Datasource getDataSource(){
        DruidDataSource d1 = new DruidDataSource();
        ...
        return d1;
    }
}

然后另一个类中:

@Configuration
public class SecondConfig{
    @Resource(name="d1")
    Datasource dataSource;
    ...
    
    

}

发现不行,为何?

阅读 3k
2 个回答
@Bean(name = "d1")
Datasource getDataSource(){
    DruidDataSource d1 = new DruidDataSource();
    // ...
    return d1;
}

你注解里有写标识吗,没有的话默认是返回类型首字母小写的字面值,比如: "dataSource"

你的 @Resource(name="d1") 指定了 bean 的 name 为 d1,这样在注入的 bean 的时候就回去寻找Datasource 类的名为 d1 的实现,然而发现 ioc 容器内并没有这个 bean。

现在有两种办法:
一是直接去掉 name=d1 的指定,改写为 @Resource,这样就会根据类型去匹配;
二是在声明 bean 的时候,指定这个 bean 的 name 为 d1,如 @Bean(name="d1")

我记得默认使用 @Bean 注解生成的 bean 的名称和方法名同名,也就是你可以

    @bean 
    Datasource d1(){
        DruidDataSource d1 = new DruidDataSource();
        ...
        return d1;
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题