@PostConstruct和@PreDestroy与servlet生命周期的关系

这篇具有很好参考价值的文章主要介绍了@PostConstruct和@PreDestroy与servlet生命周期的关系。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

执行顺序结果

/**
 * 服务器加载Servlet
 * ---> 创建servlet实例,实现servlet构造函数
 * ---> 执行注解@PostConstruct
 * ---> servlet.Init()
 * ---> servlet/service() 方法
 * ---> 执行注解@PreDestroy
 * ---> servlet.destroy()
 * ---> 服务器卸载Servlet完毕
 */

servlet生命周期

1.web服务器启动时,会对servlet进行实例化操作
2.第一次访问servlet时,会调用init方法进行初始化操作,这个操作只进行一次
3.每次访问servlet时,都会调用service方法进行真正的请求和响应
4.web服务器关闭时,会调用destroy进行销毁操作
5.在整个生命周期期间,init()和destroy()都各执行一次
6.与web服务器同生共死

 @PostConstruct和@PreDestroy与servlet生命周期的关系,servlet,spring boot,spring,jdk

Servlet的init()、destory()和Spring的PostConstruct、PreDestroy

Servlet 的 init() 和 destroy()

在 Servlet 的生命周期中,init() 和 destroy() 方法的作用分别是:

  1. init(): 此方法在 Servlet 实例化后立即调用,用于执行一次性的初始化工作(例如,打开数据库连接、初始化配置设置等)。Servlet 容器在部署后首次接收到对该 Servlet 的请求时,或者服务器启动时,会创建 Servlet 实例并调用其 init() 方法。

  2. destroy(): 此方法在 Servlet 的生命周期结束时调用,用于执行清理工作(例如,关闭数据库连接、释放资源等)。当服务器关闭,或者 Servlet 容器决定卸载 Servlet 时,会调用 destroy() 方法。

Spring 的 @PostConstruct 和 @PreDestroy

与 Servlet 的 init() 和 destroy() 类似,Spring 框架的 @PostConstruct 和 @PreDestroy 注解也用于执行一次性的初始化和清理工作,但是它们是基于 Java 的 JSR 250 标准,所以不仅限于 Spring:

  1. @PostConstruct: 此注解标记在一个方法上,表明该方法应在 bean 的所有必需依赖项已被 Spring 容器注入后调用,且在第一次对其他 bean 的使用之前。通常,此方法用于一次性的初始化工作。

  2. @PreDestroy: 此注解标记在一个方法上,表明该方法应在 bean 被容器销毁之前调用。通常,此方法用于执行清理工作。

即:@PostConstruct和@PreDestroy在整个服务运行过程中,有且只会被服务调用一次;

不同的是@PostConstruct是在服务启动的时候,一般用来init初始化配置与servlet中init()方法类似;而@PreDestroy是在服务结束的时候,一般用来清理资源,比如关闭线程池,与servlet中destory()方法类似;

 总的来说,无论是 Servlet 的 init() 和 destroy() 方法,还是 Spring 的 @PostConstruct 和 @PreDestroy 注解,它们的选择主要取决于你所处的环境以及你想要在何时执行初始化和清理工作。如果你在编写一个 Servlet,那么你可能需要使用 init() 和 destroy()。如果你在使用 Spring 框架,那么 @PostConstruct 和 @PreDestroy 就是好选择。

注意:在新版本JDK中, @PostConstruct和@PreDestroy并不在“javax.annotation.”包下面,而是在“jakarta.annotation.”包下面;

下面是测试案例

创建一个ServletDemo类

public class ServletDemo {
    public ServletDemo() {
        System.out.println("1.demo 构造器执行");
    }

    public void init() {
        System.out.println("3.demo init 方法执行");
    }

    @PostConstruct
    public void postConstruct() {
        System.out.println("2.postConstruct 执行");
    }

    @PreDestroy
    public void preDestory() {
        // Disconnected from the target VM, address: '127.0.0.1:56517', transport: 'socket'
        System.out.println("5.preDestory 执行");
    }

    public void destory() {
        System.out.println("6.destory 开始执行...");
    }
}

创建一个ServletDemoConfig

public class ServletDemoConfig {
    @Bean(name = "servletDemo", initMethod = "init", destroyMethod = "destory")
    public ServletCat servletCat() {
        return new ServletDemo();
    }
}

Main启动类


public class ServletDemoMain {
    public static void main(String[] args) {
        startServletDemoConfig();
startServletDemo();
    }
 private static void startServletDemoConfig(){
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ServletDemoConfig.class);
        System.out.println("测试...Config");
        context.close();
    }
    private static void startServletDemo(){
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ServletDemo.class);
        System.out.println("测试...");
        context.close();
    }
}

最终结果

执行方法startServletDemoConfig时,相当于把@Configuration/@Component注解放在ServletDemoConfig类上面:

1.demo 构造器执行
2.postConstruct 执行
3.demo init 方法执行
测试...Config
5.preDestory 执行
6.destory 开始执行...

执行方法startServletDemo时,相当于把@Configuration/@Component注解放在ServletDemo类上面:文章来源地址https://www.toymoban.com/news/detail-604594.html

1.demo 构造器执行
2.postConstruct 执行
测试...
5.preDestory 执行

到了这里,关于@PostConstruct和@PreDestroy与servlet生命周期的关系的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Servlet生命周期

    当客户端想Servlet容器(例如Tomcat)发出HTTP请求要求访问Servlet时,Servlet容器首先会解析请求,检查内存中是否已经有了该Servlet对象,如果有,则直接使用该Servlet对象,如果没有,则创建Servlet实例对象,然后通过调用init()方法实现Servlet的初始化工作。需要注意的是,在

    2024年01月25日
    浏览(27)
  • Servlet 生命周期

    目录 Servlet 遵循过程 init()方法 Service()方法 destroy()方法 doGet() 和 doPost() 方法 Servlet 生命周期可被定义为从创建直到毁灭的整个过程: Servlet 初始化后调用 init () 方法。 Servlet 调用 service() 方法来处理客户端的请求。 Servlet 销毁前调用 destroy() 方法。 最后,Servlet 是由 JVM 的垃圾

    2024年02月08日
    浏览(32)
  • Spring Boot各版本与Java版本的对应兼容关系,与构建工具(Maven、Gradle)版本的对应兼容关系,对servlet 容器的支持

    by:垃圾程序员 当前文章具有时效性,在当前springboot的版本下做的整合。之后大家视情况可以直接到Spring的官网查看 Spring | Home Level up your Java code and explore what Spring can do for you. https://spring.io/ 下面是Spring Boot各个版本的支持时间 下面是Spring Boot 推荐使用的各个版面,并标注出

    2024年02月10日
    浏览(34)
  • Servlet接口中有哪些方法及Servlet生命周期

    void init(ServletConfig config) throws ServletException void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException 生命周期: Web 容器加载 Servlet 并将其实例化后, Servlet 生命周期开始,容器运行其  init() 方法进行 Servlet 的初始化; 请求到达时调用 Servlet 的 service() 方法

    2024年02月07日
    浏览(33)
  • 详解Spring Boot中@PostConstruct的使用

    在Java中, @PostConstruct 是一个注解,通常用于标记一个方法,它表示该方法在类实例化之后(通过构造函数创建对象之后)立即执行。 加上 @PostConstruct 注解的方法会在对象的所有依赖项都已经注入完成之后执行。通过使用 @PostConstruct 注解,我们可以确保在对象完全创建和初

    2024年02月10日
    浏览(22)
  • 创建javaEE项目(无maven),JSP(九大内置对象)、Servlet(生命周期)了解

    1.创建一个普通的java项目 2.项目根目录右键,添加模板 3.配置tomcat服务器 4.配置项目tomcat依赖         用户通过浏览器发送一个请求,服务器tomcat接收到后,解析web.xml配置文件进行分析执行接口对应的类;         Tomcat服务器支持:支持Servlet规范。而要想让它能找到

    2024年02月05日
    浏览(34)
  • Vue2和Vue3生命周期映射关系及异同

    beforeCreate - 使用 setup() created - 使用 use setup() beforeMount -onBeforeMount mounted - onMounted beforeUpdate - onBeforeUpdate updated - onUpdated beforeDestroy- onBeforeUnmount destroyed -onUnmounted activated - onActivated deactivated - onDeactivated errorCaptured - onErrorCaptured beforeCreate - 使用 setup() 函数替代 Vue 2 中的 beforeCrea

    2024年01月24日
    浏览(33)
  • 【Spring】——Spring生命周期

    ❤️❤️❤️Spring专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring_冷兮雪的博客-CSDN博客 前面我们讲完了Spring中有关Bean的读和取,我们还没有好好去了解了解Bean对象,这篇 就是对Bean的深入学习。 限定程序中变量的可用范围叫做作用域,或者说

    2024年02月08日
    浏览(37)
  • Spring进阶(十六)之spring生命周期

    目录 Bean生命周期 阶段1:Bean元信息配置阶段 Bean信息定义4种方式 API的方式 XML的方式 properties文件的方式 注解的方式 小结 阶段2:Bean元信息解析阶段 Bean元信息的解析主要有3种方式 XML方式解析:XmlBeanDefinitionReader properties文件定义bean的解析: PropertiesBeanDefinitionReader 注解方式

    2024年02月03日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包