# 23.9. 应用退出

为确保`ApplicationContext`在退出时被平静的（gracefully）关闭，每个`SpringApplication`都会注册一个JVM的shutdown钩子，所有标准的Spring生命周期回调（比如`DisposableBean`接口或`@PreDestroy`注解）都能使用。

此外，如果想在`SpringApplication.exit()`被调用时返回特定的退出码（exit code），这些beans可以实现`org.springframework.boot.ExitCodeGenerator`接口。这个退出码之后会被传递到`System.exit()`，作为状态码返回。

```java
@SpringBootApplication
public class ExitCodeApplication {

    @Bean
    public ExitCodeGenerator exitCodeGenerator() {
        return () -> 42;
    }

    public static void main(String[] args) {
        System.exit(SpringApplication
                .exit(SpringApplication.run(ExitCodeApplication.class, args)));
    }

}
```

`ExitCodeGenerator`接口也可以被异常实现。当遇到这样的一个异常，Spring Boot将返回由被实现了的`getExitCode()`方法提供的退出码。
