如何访问Spring Bean名称?

时间:2014-08-14 06:08:14

标签: java spring dependency-injection

@Named("myUniqueName") 
public class ReportDashboardDao implements DashboardDAO{ 
//STUFF 
}

当我像这样注入DashboardDAO时,如何访问@Named标签内的字符串:

@Named
public class DshboardDaoConsumer(){

@Inject List<DashboardDAO> dashboardDAO;
//STUFF
} 

3 个答案:

答案 0 :(得分:4)

使用地图

@Inject 
Map<String, DashboardDao> dashBoardDaos;

这将注入Map,其中bean名称为键,daos为值。

当然,您也可以从类实例中读取注释值。

答案 1 :(得分:2)

你做不到。你是按类型注射的。注入完成后,Spring不会留下bean的对象和bean名称之间的任何关系。

您可能需要查看ApplicationContext#getBeanNamesByType(),具体取决于您要执行的操作。

答案 2 :(得分:1)

实施BeanNameAware

@Named("myUniqueName") 
public class ReportDashboardDao implements DashboardDAO, BeanNameAware{ 
      //STUFF 

     private String beanName;

     @Override 
     public Void setBeanName(String beanName) {
        this.beanName = beanName;
     } 

}

这样Spring就可以将beanName注入bean中。如果您在String getBeanName();界面中添加公开DashboardDAO,则DashboardDaoConsumer将能够获取该公开{{1}}。

在这种特殊情况下,Spring将注入您在注释中指定的名称。