java - 如何使用注释从配置文件中使用变量来限定 Autowiring 的属性?

标签 java spring annotations

我的具体问题是我已经配置了两个实现相同接口(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/

相关文章:

java - 在 Java (Swing) 中可以注册多个按键监听器事件吗?

java - 为什么JAVA 10中的var不能初始化为null?

java - 由 : java. lang.IllegalArgumentException 引起:至少提供了 1 个参数,但查询中仅存在 0 个参数

Spring Security 方法级别安全注释不起作用

java - 自定义授权注解

annotations - guice 忽略提供者?

java - 如何检测待处理的 JDO 事务?

java - 为什么调用获取父类作为参数的方法,而不调用获取子类作为参数的方法?

java - 当有两个用@Qualifier定义的候选者时,Spring如何决定注入(inject)哪个bean?

java - Spring 验证修复