My goal is a framework where concrete types of beans can be easily changed by a properties file. I also prefer annotations to XML. Ideally I’d to use a combination of @Resource and SpEL like this:
@Resource(type="#{myProperties['enabled.subtype']}")
SomeInterface foo;
where I’ve loaded myProperties with a PropertiesFactoryBean or <util:properties> from a file that includes:
enabled.type = com.mycompany.SomeClassA; // which implements SomeInterface
This doesn’t work because the argument of type must be a literal, i.e., no SpEL allowed. What’s the best practice here?
Update: See my answer below.
This is exactly the use case for Spring Java Configuration.
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-java
Or you can alternatively make a Factory.
Using: org.springframework.beans.factory.FactoryBean<SomeInterface>
The name of the bean that implements FactoryBean will be seen as a “SomeInterface” even though its not.