博客
关于我
@PostConstruct、@PreDestroy注解总结
阅读量:405 次
发布时间:2019-03-05

本文共 1351 字,大约阅读时间需要 4 分钟。

Spring中的@PostConstruct和@PreDestroy注解

1. 应用场景

在Spring框架中,@PostConstruct注解用于在依赖注入完成后执行一次初始化操作。这非常有用当需要在对象构造完成后进行一些依赖的查询或操作时。例如,可以在构造一个对象后,从数据字典获取配置信息进行初始化操作。@PostConstruct注解只能用于初始化操作,且只会在依赖注入完成后执行一次。

而@PreDestroy注解则用于在对象销毁前释放资源。常见的场景包括关闭数据库连接、释放文件资源或清理内存等。

2. 加载顺序

Spring中的加载顺序遵循以下规则:

  • 首先是构造函数(Constructor)
  • 其次是依赖注入(@Autowired)
  • 最后是@PostConstruct初始化方法

在服务器环境中,加载顺序扩展到更大的范围,包括:

  • 服务器加载Servlet
  • servlet构造函数加载
  • @PostConstruct初始化
  • Service初始化(init方法)
  • Service销毁(destroy)
  • @PreDestroy注解处理
  • 服务器卸载Servlet

3. 代码示例

以下是一个使用@PostConstruct注解的典型示例:

@Component public class DbInit { @Autowired private UserRepository userRepository;
@PostConstruct  private void postConstruct() {      User admin = new User("admin", "admin password");      User normalUser = new User("user", "user password");      userRepository.save(admin, normalUser);  }

}

以下是一个使用@PreDestroy注解的示例:

@Component public class UserRepository { private DbConnection dbConnection;
@PreDestroy  public void preDestroy() {      dbConnection.close();  }

}

4. Java 9及以上版本的注意事项

需要注意的是,@PostConstruct和@PreDestroy注解原本属于Java EE的一部分,但在Java 9中被标记为deprecated,并在Java 11被正式移除。因此,在Java 11及以上版本中,如果仍想使用这些注解,需要手动添加相应的依赖:

javax.annotation
javax.annotation-api
1.3.2

这样可以确保在最新版本的Java中仍然能够正常使用这些注解。

总结

@PostConstruct和@PreDestroy注解在Spring框架中提供了强大的初始化和销毁操作能力。理解它们的应用场景和加载顺序,对于优化Spring应用程序的资源管理至关重要。此外,随着Java版本的更新,正确处理这些注解的依赖也是开发者需要注意的事项。

转载地址:http://zphwz.baihongyu.com/

你可能感兴趣的文章
Openlayers实战:绘制图形,导出KML文件
查看>>
Openlayers实战:绘制多边形,导出CSV文件
查看>>
Openlayers实战:绘制带箭头的线
查看>>
Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
查看>>
Openlayers实战:非4326,3857的投影
查看>>
Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
查看>>
Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
查看>>
Openlayers高级交互(13/20):选择左右两部分的地图内容,横向卷帘
查看>>
Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
查看>>
Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
查看>>
Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
查看>>
Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
查看>>
Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
查看>>
Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
查看>>
Openlayers高级交互(2/20):清除所有图层的有效方法
查看>>
Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
查看>>
Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
查看>>
Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
查看>>
Openlayers高级交互(5/20):右键点击,获取该点下多个图层的feature信息
查看>>
Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
查看>>