Spring-21-注解开发bean作用范围与生命周期管理
- 是否单例
由 Scope 注解设置,默认为 singleton (单例模式),设置为 prototype 为非单例
@Component
@Scope("prototype")
class xxx {
}
- 生命周期
PostConstruct 与 PreDestroy 注解设置初始化与析构
@PostConstruct
private void init() {
}
@PreDestroy // 非单例模式不执行
private void destroy() {
}
还需使 context 关闭才会执行 destroy(),有下面两种方法
// ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
ctx.registerShutdownHook(); // 注册钩子 (jvm 结束前关闭资源)
ctx.close(); // 直接关闭
用 ApplicationContext 接口实例化的 context 不包含上面两个方法,要用实例的类名
[补充]:
-
非单例模式下不会执行 PreDestroy 注解的函数
-
较新版本的 jdk 不再支持两个注解, 需添加依赖 javax.annotation-api
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
- jdk 版本问题
Spring 注解开发时出现错误:Unsupported class file major version 62
原因是 jdk 编译版本过高,将编译等级改为 8 即可 (Compiler->Java Compiler)