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

在一个类中

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

然后另一个类中:

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

}

发现不行,为何?


青春有我
浏览 1806回答 2
2回答

翻翻过去那场雪

@Bean(name = "d1")Datasource getDataSource(){     DruidDataSource d1 = new DruidDataSource();    // ...     return d1; }你注解里有写标识吗,没有的话默认是返回类型首字母小写的字面值,比如: "dataSource"。

30秒到达战场

你的 @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;     }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java