title: Spring's IOC with annotations is confusing for a Guice guy. Help to enlighten me
body: <p>I came into IOC via Google Guice.</p>
  
  <p>And now I've been forced to use Spring 2.5.6 at work &amp; I am lost because Spring is quite complicated. Here are some questions after reading bits of the spring docs:</p>
  
  <ul>
  <li>What is the difference between <code>@Service</code>, <code>@Controller</code> and <code>@Component</code> ? If I just want to auto wire my objects like Guice, do I need to be bothered by all these stereotypes ?</li>
  <li><p>I'm planning to go the component-scan route with only constructor injection (Setter injection is mostly advocated by the Church of Scientology) and no freaking XML stuff. So is this code extract all I need ?</p>
  
  <pre><code>@Component
  public class Foo
  {
      @Autowired(required=true)
      public Foo( Bar bar, @Qualifier("yay") Boo yay, 
                  @Qualifier("hoo") Boo hoo )
      {
          _bar = bar; _boo = boo;
      }
  
      Bar _bar;
      Boo _boo;
  ....snipped...
  }
  
  @Component
  @Qualifier("yay")
  @Scope(BeanDefinition.SCOPE_PROTOTYPE)
  public BooYay implements Boo
  {
  }
  
  @Component
  @Qualifier("hoo")
  @Scope(BeanDefinition.SCOPE_PROTOTYPE)
  public BooHoo implements Boo
  {
  }
  </code></pre>
  
  <ul>
  <li>In the above example, did I correctly qualify the 2 different implementations of <code>Boo</code> ?</li>
  <li>Is there any feature similar to Google Guice's Providers ?</li>
  <li>How do I mimic the <code>@Singleton</code> behaviour (in Guice) in Spring ?</li>
  </ul></li>
  </ul>