栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Bean生命周期(面试版)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Bean生命周期(面试版)

一、bean生命周期基本流程
  1. 实例化(通过反射创建对象)
  2. 属性填充(属性值非自动装配)
  3. 初始化(如数据源赋值、校验属性)
  4. 销毁(ioc容器销毁关闭,关闭数据源)
二、流程细节 1、初始化方法和销毁方法
public class Book {
    public void init(){
        System.out.println("初始化方法");
    }
    public void destroy(){
        System.out.println("销毁方法");
    }
}
1)xml方式:

2)@Bean方式:
@Bean(initMethod = "init",destroyMethod = "destroy")
public Book book(){
    return new Book();
}
3) InitializingBean(初始化接口)、DisposableBean(销毁接口) 实现其方法即可
public interface InitializingBean {
	void afterPropertiesSet() throws Exception;
}
public interface DisposableBean {
	void destroy() throws Exception;
}
4)声明式注解 @PostConstruct(初始化)@PreDestroy(销毁)

结论:

1、初始化销毁顺序:声明式—>接口式—>自定义式

2、单例:容器关闭时候销毁;多例:容器关闭不销毁

2、BeanPostProcessor后置处理器
  • 在所有初始化方法前后执行
  • spring所有bean初始化前后都会执行后置处理器
  • 可以定义多个后置处理器,一旦返回null,则跳过之后的处理器往下执行了
  • 可以返回bean,也可以返回bean的包装对象(aop动态代理)
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("前置处理器");
        return bean;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("后置处理器");
        return bean;
    }
}
3、xxxAware接口

spring aware 目的为了让bean获取spring容器中的服务。

  • BeanNameAware:获取容器中bean名称
  • BeanFactorAware:获取BeanFactory容器
  • ApplicationContextAware:获取应用上下文
  • 属性填充后,后置处理器前执行
@Component
public class BeanUtil implements ApplicationContextAware {
    private ApplicationContext context;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context = applicationContext;
    }
    public Object getBean(String beanName){
        return context.getBean(beanName);
    }
}

源码解析:

class ApplicationContextAwareProcessor implements BeanPostProcessor

总结执行流程:
  1. 实例化
  2. 属性填充
  3. 三种方式初始化
  4. 处理Awar接口
  5. BeanPostProcessor子接口的处理,如AutowiredAnnotationBeanPostProcessor扫描@autowired注解,完成自动注入
  6. 处理各种后置处理器,在初始化方法后的后置方法中会根据情况包装为代理类,即AOP
  7. 销毁
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458557.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号