Я делаю это весной 3, используя карту следующим образом:
<jee:jndi-lookup id="myJndiLookup" jndi-name="com.techtrip.spring.config.myJndiLookup"></jee:jndi-lookup>
<bean id="somethingWithMap" class="com.techtrip.foo.SomethingWithMap">
<property name="propMap">
<map>
<entry key="myJndiLookup" value-ref="myJndiLookup" />
</map>
</property>
</bean>
В большинстве случаев работает нормально. Вы можете столкнуться с проблемами, если используете AOP или что-то, что оборачивает компонент в классе Proxy, даже если вы правильно настроили eager init. Решением в этом случае является прямой доступ к бинуthingWithMap из контекста приложения, когда это необходимо, с помощью:
applicationContext.getBeansOfType(type, includeNonSingletons, allowEagerInit);
* Обратите внимание, что это вернет Map<String, T>
, где вы можете получить доступ к бину по имени.