小编hea*_*tar的帖子

Spring 上下文层次结构中 bean 销毁的顺序

当 Spring 上下文层次结构关闭时,没有保证 bean 被销毁的顺序,这样说是否正确?例如,子上下文中的 bean 将在父上下文之前被销毁。从一个最小的例子来看,上下文的破坏似乎在上下文之间完全不协调(奇怪的是)。两个上下文都注册了一个关闭钩子,该钩子稍后将在不同的线程中执行。

@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 …
Run Code Online (Sandbox Code Playgroud)

java spring spring-test hierarchical context-configuration

7
推荐指数
1
解决办法
7473
查看次数