Bean的生命周期

简介: Bean的生命周期

@[TOC]

1 指定初始化和销毁方法

  • 创建Car

    public class Car {
         
    
      public Car() {
         
          System.out.println("car constructor......");
      }
    
      public void init(){
         
          System.out.println("car ...init...");
      }
    
      public void destory(){
         
          System.out.println("car ...destory...");
      }
    }
    
  • 写配置类

    @Configuration
    public class MainConfigOfLifeCycle {
         
    
      @Bean(value = "car",initMethod="init",destroyMethod = "destory")
      public Car car(){
         
          return new Car();
      }
    }
    
  • 测试
    @Test
      public void test01(){
         
          AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
          System.out.println("容器创建完成");
          context.close();
      }
    

    2 使用接口InitializingBeanDisposableBean实现初始化和销毁

  • 新建Cat类实现接口InitializingBeanDisposableBean
    ```java
    import org.springframework.beans.factory.DisposableBean;
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.stereotype.Component;

@Component
public class Cat implements InitializingBean, DisposableBean {

public Cat() {
    System.out.println("cat constructor....");
}

//容器关闭时调用
@Override
public void destroy() throws Exception {
    System.out.println("cat ... destroy ....");
}

//Bean创建完成,并且属性都复制后执行
@Override
public void afterPropertiesSet() throws Exception {
    System.out.println("cat ... afterPropertiesSet ...");
}

}

* 注入IOC容器
```java
@Configuration
@ComponentScan("com.yunfeng.spring2.entity")
public class MainConfigOfLifeCycle {}
  • 测试
    @Test
      public void test01(){
         
          AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
          System.out.println("容器创建完成");
          context.close();
      }
    

    3 使用JSR250中的@PreDestroy@PostConstruct

    ```java
    import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Component
public class Dog {

public Dog() {
    System.out.println("Dog constructor....");
}

//容器关闭时调用
@PreDestroy
public void destroy() throws Exception {
    System.out.println("Dog ... destroy ....");
}

//Bean创建完成,并且属性都复制后执行
@PostConstruct
public void afterPropertiesSet() throws Exception {
    System.out.println("Dog ... PostConstruct ...");
}

}

# 4 BeanPostProcessor后置处理器
* 在bean初始化前后进行一些处理工作
```java
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;

/**
 * 后置处理器:初始化前后进行处理工作
 */
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
    //初始化前执行
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessBeforeInitialization..." + beanName + bean);
        return bean;
    }

    //初始化后执行
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessAfterInitialization..." + beanName + bean);
        return bean;
    }
}
目录
相关文章
|
机器学习/深度学习 人工智能 缓存
极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行
【4月更文挑战第26天】研究人员提出LASP,一种针对线性注意力机制的序列并行方法,解决了处理超长序列时GPU内存限制的问题。LASP利用点对点通信和内核融合优化,降低通信开销,提高GPU集群执行效率。在128个A100 GPU上,LASP能处理4096K长度的序列,比现有方法快8倍。虽然面临P2P通信需求高、环境适应性和特定机制依赖的挑战,但LASP为大型语言模型的效率和性能提供了新思路。[链接](https://arxiv.org/abs/2404.02882)
289 6
|
JavaScript 前端开发 测试技术
搭建Vue3组件库:第五章 Jest进行前端单元测试
单元测试是软件质量的重要保证。本章节介绍Jest测试框架。
510 0
|
开发框架 Linux C语言
C、C++、boost、Qt在嵌入式系统开发中的使用
C、C++、boost、Qt在嵌入式系统开发中的使用
442 1
|
4月前
|
边缘计算 人工智能 5G
5G引领家庭网络升级:速度、稳定性与智能化的新时代
5G引领家庭网络升级:速度、稳定性与智能化的新时代
319 69
|
8月前
|
安全 网络安全 开发工具
解决Ascend上vllm运行时出现urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]
在使用vllm模型时,运行示例代码下载模型文件时遇到了SSL安全校验问题。临时解决方案是修改`requests/sessions.py`文件中`request`函数的`verify`参数默认值为`False`。
|
机器学习/深度学习 分布式计算 算法
MaxCompute 的 MapReduce 与机器学习
【8月更文第31天】随着大数据时代的到来,如何有效地处理和分析海量数据成为了一个重要的课题。MapReduce 是一种编程模型,用于处理和生成大型数据集,其核心思想是将计算任务分解为可以并行处理的小任务。阿里云的 MaxCompute 是一个面向离线数据仓库的计算服务,提供了 MapReduce 接口来处理大规模数据集。本文将探讨如何利用 MaxCompute 的 MapReduce 功能来执行复杂的计算任务,特别是应用于机器学习场景。
261 0
|
存储 Ubuntu 关系型数据库
如何创建数据库 PostgreSQL
【8月更文挑战第12天】
450 4
如何创建数据库 PostgreSQL
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
【4月更文挑战第30天】对比 Flutter(Dart,强类型,Google支持,快速热重载,高性能渲染)与 React Native(JavaScript,庞大生态,热重载,依赖原生渲染),文章讨论了开发语言、生态系统、性能、开发体验、学习曲线、社区支持及项目选择因素。两者各有优势,选择取决于项目需求、团队技能和长期维护考虑。参考文献包括官方文档和性能比较文章。
505 0
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
|
10月前
|
传感器 人工智能 物联网
数字孪生在航空航天领域的应用
数字孪生技术在航空航天领域的应用日益广泛,从设计、制造、测试到运营和维护,全面革新了传统工作模式。通过创建物理实体的虚拟复制品,实现实时模拟、预测和优化,显著提升产品性能、安全性和经济效益。具体案例如嫦娥五号探测器和C919客机的成功应用,展示了数字孪生技术的巨大潜力和未来前景。
|
程序员
老程序员分享:Lua的unpack
老程序员分享:Lua的unpack
441 0