0

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 ?

krosenvold
  • 75,535
  • 32
  • 152
  • 208

2 Answers2

1

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.

Brian Matthews
  • 8,506
  • 7
  • 46
  • 68
  • 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 Nov 14 '08 at 17:14
1

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

Ed Thomas
  • 1,153
  • 1
  • 12
  • 21