你在这里是做什么的,自动装配类建设浅析,为阿维亚德说,你可以使用setter和getter方法为您的数据源注射
<bean id="foo" class="FooClass">
<constructor-arg index="0">datasource</constructor-arg>
...other constructor args
</bean>
<bean>your datasource bean1</bean>
<bean>your datasource bean2</bean>
在您的实现,您可以设置数据源,如下
@Autowire
private FooClass foo;
foo.setDataSource(datasourcebean1);
你fooClass
public void FooClass(Datasource datasource){
private Datasource datasource;
public void setDatSource(Datasource datasource);
public Datasource getDataSource();
}
EDIT-按照Spring文档,如果它的值没有改变,你可以传递构造函数参数。但是对于FooClass来说,你希望在不同的场合传递不同的数据源(希望我能正确得到它),所以在这种情况下,你需要在spring初始化时传递datasource实例或者datasource1或者datasource2,因为Spring会期望构造函数参数同时初始化FooClass。稍后在运行时传递不同的数据源并使用setter方法设置数据源。
豆Spring配置
<bean id="foo" class="FooClass">
<constructor-arg index="0" ref="datasource1"></constructor-arg>
...other constructor args
</bean>
public class FooClass(){
// on spring initialization, it will inject datasource1
public void FooClass(DataSource dataSource){
}
have your setter and getter method for datasource
}
凡在你的呼叫服务
public class dataBaseInvoke(){
public Datasource datasource2
public FooClass fooClass;
inside method{
fooClass.setDatasource(datasource2);
fooClass.addFoo();
}
}
另一点,我当时无法使用注释配置必须是在XML –