Nov 28th, 2011, 11:09 PM
Initializing a Map with the @Value annotation
The current @Value annotation seems to only work for simple, basic types.
Is there a way to use it to initialize a map?
That is, installing a collection of key value pairs driven from external properties?
For my particular case, the keys are constants but the values are property driven. It would sure
be nice to have less XML.
Dec 1st, 2011, 10:43 AM
@Value is there really for setting values with Spring Expression Language SPel. So if you can write a SPel expression that evaluates to a Map, then yes you can use @Value.
If you can't write a SPel, then you can write code to do the work.
Also a Properties object is a Hashtable, so you can assign your Map directly from your Properties.
Look at utilroperties as another solution, or even used in conjunction with SPel and @Value.
Hope that helps.
Dec 2nd, 2011, 12:24 PM
Really appreciate the response and great ideas
Great ideas, didn't pan out for me. Maybe I'm missing something.
Did some digging into SPel and verified its support for lists but found no support for creating a map.
Also noticed while perusing the source code that multidimensional arrays are not supported. Unless
someone can post a map example, I don't think that it is currently possible.
Assigning Map from Properties doesn't quite work since the key I want for my map is not the key for
I could of course have local fields for all the values and then build the map programmatically,
but that would involve having an init() method (or a lazy load implementation) and it seems that
that direction is getting way too complicated.
For now, it seems that the easiest way to do this is to have this one bean wired via XML and all
the other beans be auto-scanned, @Autowired, and initialized by @Value. Project-wide, we don't
have a huge number of these things, so it is not the end of the world.
Tags for this Thread