Spring -- Bean的生命周期

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

BeanDefinition

Spring容器在进行实例化时,会将xml配置的<bean>的信息封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性用来描述Bean 

 BeanDefinition 中几个重要方法如下

Spring -- Bean的生命周期,spring,java

  • beanClassName:bean 的类名
  • initMethodName:初始化方法名称
  • properryValues:bean 的属性值
  • scope:作用域
  • lazyInit:延迟初始化        

  

第一步 拥有 BeanDefinition 后,首先就是通过反射调用构造函数,实例化当前Bean对象

第二部 对一些 @Autowire 或 @Value 属性进行依赖注入

第三步 如果这个Bean实现了 Aware 接口,那就要重写接口里面的方法,比较常见的Aware接口有如下三个

第四步  Bean的后置处理器,用来增强Bean的功能,在Bean的初始化之前执行

第五步  初始化方法,其中的 InitializingBean 也是个接口,如果Bean实现了这个接口,那么也需要重写接口的方法

第六步  也是Bean的后置处理器,在Bean的初始化之后执行,比如AOP,AOP的底层就是动态代理

第六步结束后,我们就能从容器中获取Bean进行使用了,使用结束后,关闭容器,Bean就会销毁

Spring -- Bean的生命周期,spring,java

 从上面可以看出,Bean的创建和初始化赋值是分开的

下面编写一个类,更直观来展示Bean的生命周期

先定义一个Bean

@Component
public class User implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, InitializingBean {

    //构造函数
    public User() {
        System.out.println("User的构造方法执行了.........");
    }

    private String name ;

    //依赖注入
    @Value("张三")
    public void setName(String name) {
        System.out.println("setName方法执行了.........");
    }

    //BeanNameAware接口
    @Override
    public void setBeanName(String name) {
        System.out.println("setBeanName方法执行了.........");
    }

    //BeanFactoryAware接口
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("setBeanFactory方法执行了.........");
    }

    //ApplicationContextAware接口
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("setApplicationContext方法执行了........");
    }

    //自定义init
    @PostConstruct
    public void init() {
        System.out.println("init方法执行了.................");
    }

    //InitializingBean接口
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("afterPropertiesSet方法执行了........");
    }

    @PreDestroy
    public void destory() {
        System.out.println("destory方法执行了...............");
    }

}

额外定义一个类,用来实现 Bean 的后置处理

@Component
public class MyBeanPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if (beanName.equals("user")) {
            System.out.println("postProcessBeforeInitialization方法执行了->user对象初始化方法前开始增强....");
        }
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if (beanName.equals("user")) {
            System.out.println("postProcessAfterInitialization->user对象初始化方法后开始增强....");
            //cglib代理对象
            Enhancer enhancer = new Enhancer();
            //设置需要增强的类
            enhancer.setSuperclass(bean.getClass());
            //执行回调方法,增强方法
            enhancer.setCallback(new InvocationHandler() {
                @Override
                public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                    //执行目标方法
                    return method.invoke(method,objects);
                }
            });
            //创建代理对象
            return enhancer.create();
        }
        return bean;
    }

}

最后,编写一个测试类并运行

public class UserTest {

    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        User user = ctx.getBean(User.class);
        System.out.println(user);
    }

}

输出结果如下

Spring -- Bean的生命周期,spring,java文章来源地址https://www.toymoban.com/news/detail-555586.html

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

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

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

相关文章

  • Spring整理-Spring Bean的生命周期

    Spring Bean的生命周期涉及多个阶段,从Bean的定义到其销毁。在这个过程中,Spring容器负责创建、初始化、使用和最终销毁Bean。了解这个生命周期有助于更好地管理Bean的行为和资源使用。 实例化(Instantiation): 容器首先创建Bean的实例。 填充属性(Populate Properties): 容器

    2024年01月21日
    浏览(16)
  • 【Spring】Bean的作用域与生命周期详情:请简述Spring的执行流程并分析Bean的生命周期?

    【Spring】Bean的作用域与生命周期详情:请简述Spring的执行流程并分析Bean的生命周期?

     我们都知道,Spring框架为开发人员提供了很多便捷,这使得开发人员能够更加专注于应用程序的核心业务逻辑,而不需要花费大量时间和精力在技术细节上。作为一个包含众多工具方法的IoC容器,存取JavaBean是其极为重要的一个环节。本文就对Spring中的Bean的作用域和生命周

    2024年02月12日
    浏览(14)
  • Spring -- Bean的生命周期

    Spring -- Bean的生命周期

    Spring容器在进行实例化时,会将xml配置的bean的信息封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性用来描述Bean   BeanDefinition 中几个重要方法如下 beanClassName:bean 的类名 initMethodName:初始化方法名称 properryValues:bean 的属性值 scope:作用域

    2024年02月15日
    浏览(16)
  • Spring Bean的生命周期

    Spring Bean的生命周期

    Bean生命周期的整个执行过程描述如下: 1、根据配置情况调用Bean构造方法或工厂方法实例化 Bean。 2、利用依赖注入完成Bean中所有属性值的配置注入。 3、如果Bean 实现了BeanNameAware 接口,则 Spring调用Bean的setBeanName()方法传入当前Bean的id值。 4、如果Bean实现了BeanFactoryAware 接口

    2023年04月22日
    浏览(15)
  • 【Spring】Spring之Bean生命周期源码解析

    什么是bean的生命周期 是指bean在spring中是如何生成,如何销毁的; spring创建对象的过程,就是IOC(控制反转)的过程; JFR Java Flight Record,java飞行记录,类似于飞机的黑匣子,是JVM内置的基于事件的JDK监控记录框架,主要用于问题定位和持续监控; 入口代码: Spring启动的时

    2024年02月15日
    浏览(12)
  • Spring Bean的生命周期 -- Spring入门(三)

    Spring Bean的生命周期 -- Spring入门(三)

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码以及可以在我主页的资源里找到,如果在学

    2024年02月15日
    浏览(13)
  • 详解Spring Bean的生命周期

    详解Spring Bean的生命周期

    Spring Bean的生命周期包括以下阶段: 1. 实例化Bean 对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化。 对于ApplicationContext容器,当容器启动结束后,便实例化所有的bean。

    2024年02月14日
    浏览(16)
  • Spring中 Bean的生命周期

    Spring中 Bean的生命周期

    如果把Spring看做一个大型工厂,则Spring容器中的Bean就是该工厂的产品。要想使用这个工厂生产和管理Bean,就需要在配置文件中告诉它需要哪些Bean,以及需要使用何种方式将这些Bean装配到一起。 Bean的本质就是Java中的类,而Spring中的Bean其实就是对实体类的引用,来生产Java类

    2024年01月24日
    浏览(12)
  • Spring Bean的生命周期解读

    Spring Bean的生命周期解读

    目录   1. Spring IOC容器 1.1 Spring IOC 容器的设计 1.1.1 BeanFactory 1.1.2 ApplicationContext 1.2 Spring Bean的生命周期 1.2.1 BeanDefinition 1.2.2 InstantiationAwareBeanPostProcessor和BeanPostProcessor 1.2.3 测试生命周期   Spring IOC 容器的设计主要是基于 BeanFactory 和 ApplicationContex t两个接口,其中ApplicationConte

    2024年02月11日
    浏览(9)
  • Spring 中 Bean 的生命周期

    在您的应用程序中,由 Spring IoC 容器管理的形成其核心的对象被称为 \\\"bean\\\" 。一个 bean 是由 Spring IoC 容器实例化、组装和管理的对象 这些 bean 是通过您提供给容器的配置元数据创建的。 Bean 定义包含了所谓的配置元数据,容器需要了解以下内容: 如何创建一个 bean Bean 的生命

    2024年02月09日
    浏览(9)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包