Spring creating multiple instances of a singleton?
===

I have a graph of Spring beans which autowire each other. Heavily simplified illustration:

    <context:annotation-config/>
    <bean class="Foo"/>
    <bean class="Bar"/>
    <bean class="Baz"/>

    ...

    public class Foo {
       @Autowired Bar bar;
       @Autowired Baz baz;
    }
    
    public class Bar {
       @Autowired Foo foo;
    }

    public class Baz {
       @Autowired Foo foo;
    }

All of these beans don't have scope specified which imply they are singletons (making them explicit singletons doesn't change anything, I've tried).

The problem is that after the instantiation of a **single application context**, instances of `Bar` and `Baz` contain **different** instances of `Foo`. How could this happen?

I have tried to create public no args constructor for `Foo` and debugging has confirmed `Foo` is created more than once. The stack trace for all of these creations is [here](http://pastebin.com/wqCRS8H7).

I have also tried to enable debug logging for Spring, and among all other lines, got the following:

    DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'Foo'
    DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'Foo'
    DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'Foo'

I understand that my beans are cross-referencing each other, but I would expect Spring framework to respect singleton scope and initialize a singleton bean once, and then autowire it to whoever wants it.

The interesting fact that if I use old school `private` constructor with `public static Foo getInstance` accessor, this works just fine - no exceptions are thrown during the context setup.

FWIW, I am using Spring version 3.0.5 (also tried with 3.1.2, same results) with `o.s.c.s.ClassPathXmlApplicationContext(String ...configLocations)` constructor.

I can easily convert my code to use static initializer but I want to understand why would Spring behave this way. Is this a bug?