如何使用注释从配置文件中使用变量限定autowired属性?

jig*_*ggy 3 java spring annotations

我的具体问题是我已经配置了两个实现相同接口的bean,并且我有第三个bean,它具有该接口类型的属性.我使用config属性注入属性.因此,假设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>
Run Code Online (Sandbox Code Playgroud)

使用url,filepath和datasource在包含的属性文件中定义.我们现在正在推动注释驱动的配置,我不知道如何注释我的dao以将数据源配置在属性文件中.我想做这样的事情,但显然不允许:

@Autowired
@Qualifier("${datasource}")
public void setDataSource(IDataSource datasource) {...}
Run Code Online (Sandbox Code Playgroud)

注意:这是春天3

Mic*_*les 5

你有任何xml配置吗?我假设你做了,因为你有一个数据源.

硬编码数据源的限定符,然后在xml配置中创建别名,该别名基于属性进行别名.

就像是

@Autowired
@Qualifier("designatedDatasource")
public void setDataSource(IDataSource datasource) {...}
Run Code Online (Sandbox Code Playgroud)

然后在xml中:

<alias name="${dataSource}" alias="designatedDatasource"/>
Run Code Online (Sandbox Code Playgroud)

我很确定春天开发人员考虑允许你按照你指定的方式去做,但就个人而言,我宁愿不这样做.解决它从哪里获得$ dataSource值可能会变得非常棘手.我还认为,在注释中支持可配置属性会使事情过于复杂化,并且会产生太多潜在的混淆.