If you create a new application context, then you have created a new container, a new factory bean and ofc, a new bean instance (shared or not).Correct me if I'm wrong, but there is a subtlety in the above statement, that may still not be clear to everyone:
(a) "the application context" - has to be the SAME INSTANCE, i.e. you have to "pass around" the application context object reference to get at the "A" as a singleton. If you create a new application context object, "A" will NOT behave as a singleton, even though it's coded that way in the spring xml config file.
An xml is just a definition - it doesn't have any life-cycle nor does it live inside the VM. Once you instantiated you get an application context (instance) - I guess the term can be used interchangeably but in most cases it refers to an 'instantiated xml'.
(b) "everybody else" can't be in another jvm or even another thread of execution (normally). "everybody else" would normally mean every other object in the current thread that has a reference to the application context object, or can get at it somehow (via, say custom ThreadLocal logic)[/quote]
If you are in another VM you can get a remote copy - this area is covered by clustering. As for thread of execution, you can be in a another thread - as long as you have a hold of the application context, you simply invoke it and you'll get the singleton.
(how the same reference is shared between different threads is not the point here).
P.S. I'm not saying your opinion is wrong - it just sounded overly complicated to me.