我的具体问题是我已经配置了两个实现相同接口(interface)的 bean,并且我有第三个 bean 具有该接口(interface)类型的属性。我使用配置属性注入(inject)属性。因此,假设 RemoteDataSource 和 LocalDataSource 实现 IDataSource 并且 dao1 具有 IDataSource 类型的属性,我的 XML 配置可能如下所示:
<bean id="datasource1" class="com.foo.RemoteDataSource">
<property name="url">${url}</property>
</bean>
<bean id="datasource2" class="com.foo.LocalDataSource">
<property name="path">${filepath}</property>
</bean>
<bean id="dao1" class="com.foo.MyDAO">
<property name="dataSource">${datasource}</property>
</bean>
在包含的属性文件中定义了 url、文件路径和数据源。我们现在正在插入注释驱动的配置,我不确定如何注释我的 dao 以将配置的数据源放在属性文件中。我想做这样的事情,但显然是不允许的:
@Autowired
@Qualifier("${datasource}")
public void setDataSource(IDataSource datasource) {...}
注意:这是 Spring 3
最佳答案
有xml配置吗?我假设您这样做是因为您拥有数据源。
对数据源的限定符进行硬编码,然后在您的 xml 配置中创建一个基于属性的别名。
有点像
@Autowired
@Qualifier("designatedDatasource")
public void setDataSource(IDataSource datasource) {...}
然后在 xml 中:
<alias name="${dataSource}" alias="designatedDatasource"/>
我很确定 spring 开发人员考虑过允许您按照您指定的方式进行操作,但就我个人而言,我宁愿不这样做。弄清楚从哪里获取 $dataSource 值可能会非常棘手。我还认为在注释中支持可配置属性会使事情变得过于复杂,并导致太多潜在的混淆。
关于java - 如何使用注释从配置文件中使用变量来限定 Autowiring 的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4696802/