title: Order of bean destruction in Spring context hierarchy
body: <p>Is it correct to say that when a Spring context hierarchy is closed, there is no guaranteed order in which the beans will be destroyed? E.g. the beans in the child context will be destroyed before the parent context. From a minimal example the destruction of the contexts seems to be totally uncoordinated between the contexts (oddly enough). Both contexts registers a shutdown hook which later will be executed in different threads.</p>
  
  <pre><code>@RunWith(SpringJUnit4ClassRunner.class)
  @ContextHierarchy({
      @ContextConfiguration(classes = {ATest.Root.class}),
      @ContextConfiguration(classes = {ATest.Child.class})
  })
  public class ATest {
  
  @Test
  public void contextTest() {
  }
  
  public static class Root {
      @Bean
      Foo foo() {
          return new Foo();
      }
  }
  
  
  public static class Child {
      @Bean
      Bar bar() {
          return new Bar();
      }
  
  }
  
  static class Foo {
      Logger logger = LoggerFactory.getLogger(Foo.class);
      volatile boolean destroyed;
  
      @PostConstruct
      void setup() {
          logger.info("foo setup");
  
      }
  
      @PreDestroy
      void destroy() {
          destroyed = true;
          logger.info("foo destroy");
      }
  
  }
  
  static class Bar {
  
      @Autowired
      Foo foo;
  
      Logger logger = LoggerFactory.getLogger(Bar.class);
  
      @PostConstruct
      void setup() {
          logger.info("bar setup with foo = {}", foo);
      }
  
      @PreDestroy
      void destroy() {
          logger.info("bar destroy, foo is destroyed={}", foo.destroyed);
      }
  
  }
  }
  </code></pre>
  
  <p>Gives the output:</p>
  
  <pre><code>21:38:53.287 [Test worker] INFO ATest$Foo - foo setup
  21:38:53.327 [Test worker] INFO ATest$Bar - bar setup with foo = com.tango.citrine.spring.ATest$Foo@2458117b
  21:38:53.363 [Thread-4] INFO ATest$Foo - foo destroy
  21:38:53.364 [Thread-5] INFO ATest$Bar - bar destroy, foo is destroyed=true
  </code></pre>
  
  <p>Is there any way to force the contexts to be closed in the "correct" order?</p>