tags:

views:

1449

answers:

2

I am trying to let a piece of runtime state decide WHICH implementation of an interface to use, preferably solely by autowiring.

I have tried making an object factory for the interface thet uses dynamic proxies, and I used qualifiers to coerce the @Autowired injections to use the factory. The qualifiers are necessary because both the factory and the implementations respond to the same interface.

The problem with this is that I end up annotating every @Autowired reference with the @Qualifier. What I'd really want to do is annotate the non-factory implementations with something like @NotCandidateForAutowiringByInterface (my fantasy annotation), or even better make spring prefer the single un-qualified bean when injecting to an un-qualified field

I may thinking along the totally wrong lines here, so alternate suggestions are welcome. Anyone know how to make this happen ?

+1  A: 

I haven't looked at this myself but I noticed Spring JavaConfig is made it to M4 and it seems to allow more flexible configuration through a combination of annotations and Java code. I wonder if it would offer a solution to your problem.

bmatthews68
Spring javaconfig solves it. But the whole concept of javaconfig seems over-engineered once you get the taste for fully annotated config. +1 for javaconfig
krosenvold
+1  A: 

You could use @Resource and specify the bean name of the factory.

Ed Thomas