H5W3
当前位置:H5W3 > 其他技术问题 > 正文

@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;
    ...
    
    

}

发现不行,为何?

回答:

@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;
    }

本文地址:H5W3 » @Resource可以注入@Bean注解的bean吗?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址