I have an application built on the Spring Framework that uses an external properties file for some things like database host string, username and password so that we can check the configuration file into our repository (it's open source) and not compromise the security of the db. It also is great because developers can keep their own copy of this file and the application will automatically use the configuration on their system rather than having to reconfigure manually.
I would like to be able to specify a bean in the same manner. We're working with some classes that could change from developer to developer and it would be great if we could allow them to specify this information in a different file so they don't have to mess with the main configuration file.
To give you an idea, we have something like
<property name="url">
<value>${db.host}</value>
</property>
Where db.host is specified in another file. What we want is something like
<bean name="ourBean" class="${class.weneed}" />
The above syntax doesn't actually work, but that demonstrates what we want to do.
Thanks in advance!
Chris
You can use a FactoryBean
for this. This example is a FactoryBean
which takes advantage of the ability of Spring to cast a classname to a Class
object when injecting properties:
public class MyFactoryBean extends AbstractFactoryBean {
private Class targetClass;
public void setTargetClass(Class targetClass) {
this.targetClass = targetClass;
}
@Override
protected Object createInstance() throws Exception {
return targetClass.newInstance();
}
@Override
public Class getObjectType() {
return targetClass;
}
}
And then:
<bean name="ourBean" class="com.xyz.MyFactoryBean">
<property name="targetClass" value="${class.weneed}"/>
</bean>
The Spring context will now have a bean called ourBean
which is an object of type ${class.weneed}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With