nfvo通过调用哪个接口实现对vnf生命周期的管理_Spring Bean的生命周期的完整过程...

bfe7c20dd0ffeed10f01545baa0375d4.png

点击蓝字 关注我

 Spring IoC容器的本质就是为了管理Bean。对于Bean而言,在容器中存在其生命周期,它的初始化和销毁也需要一个过程,在一些需要自定义的过程中,我们可以插入代码去改变它们的一些行为,以满足特定的需求,这就需要使用到Spring Bean的生命周期了。

    生命周期主要是为了了解Spring IoC容器初始化的和销毁Bean的过程。

5f10eea5c563bd597976fadae7c4b229.png

    Spring IoC容器对Bean的管理还是比较复杂的,Spring IoC容器在执行了初始化和依赖注入后,会执行一定的步骤来完成初始化,通过这些步骤我们就能自定义初始化,而在Spring IoC容器正常关闭的时候,它会也执行一定的步骤来关闭容器,释放资源。除需要了解整个生命周期的步骤外,还要知道这些生命周期的接口是针对什么而言的。

首先介绍生命周期的步骤:

1.instantiate bean对象实例化

2.populate properties封装属性

3.如果Bean实现了接口 BeanNameAware 的 setBeanName 方法,那么它就会调用这个方法

4.如果Bean实现了接口 BeanFactoryAware 的 setBeanName方法,那么它就会调用这个方法

5.如果Bean实现了接口 ApplicationContextAware 的 setApplicationContext 方法,且Spring IoC容器也必须是一个ApplicationContext 接口的实现类,那么才会调用这个方法,否则是不调用的

6.如果Bean实现了接口 BeanPostProcessor 的 postProcessBeforeInitialization 方法,那么它就会调用这个方法

7.如果Bean实现了接口 BeanFactoryProcessor 的 afterPropertiesSet 方法,那么它就会调用这个方法

8.如果Bean自定义了初始化方法,它就会调用已定义的初始化方法

9.如果Bean实现了接口 BeanPostProcessor 的 postProcessAfterInitialization 方法,完成了这些调用,这个时候就完成了初始化,那么Bean就存在Spring IoC的容器中了 ,使用者就可以从中获取Bean的服务

10.如果Bean实现了接口 DisposableBean 的 destory 方法,那么就会调用它。

如果定义了自定义销毁方法,那么就会调用它

测试例子:

创建类Man

package com.ioc.demo3; import org.springframework.beans.BeansException;import org.springframework.beans.factory.BeanNameAware;import org.springframework.beans.factory.DisposableBean;import org.springframework.beans.factory.InitializingBean;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware; public class Man implements BeanNameAware, ApplicationContextAware, InitializingBean, DisposableBean {     private String name;     public void setName(String name) {        System.out.println("第二步:设置属性");        this.name = name;    }     public Man(){        System.out.println("第一步:初始化。。。");    }     public void setup(){        System.out.println("第七步:Man被初始化了。。。");    }     public void teardown(){        System.out.println("第十一步骤:Man被销毁了。。。");    }     @Override    public void setBeanName(String name) {        System.out.println("第三步:设置Bean的名称name");    }     @Override    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {        System.out.println("第四步:了解工厂信息");    }     @Override    public void afterPropertiesSet() throws Exception {        System.out.println("第六步:属性设置后");    }     public void run(){        System.out.println("第九步:执行业务方法");    }     @Override    public void destroy() throws Exception {        System.out.println("第十步:执行Spring的销毁方法");    }}

创建类MyBeanPostProcessor

package com.ioc.demo3; import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor; 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;    }}

设置applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">  <bean id="man" class="com.ioc.demo3.Man" init-method="setup" destroy-method="teardown">        <property name="name" value="小刘">property>    bean>    <bean class="com.ioc.demo3.MyBeanPostProcessor"/>  beans>

测试类

package com.ioc.demo3; import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;  public class SpringDemo3 {     @Test    public void demo(){        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");        Man man1 = (Man)applicationContext.getBean("man");         man1.run();          ((ClassPathXmlApplicationContext) applicationContext).close();    } }

运行结果:

c36d506caff18cf915529f934c461f7b.png bfe7c20dd0ffeed10f01545baa0375d4.png

夏天到了

6a85ba44ff07a2a3c26bb07caaf63e9e.gif

球分享

6a85ba44ff07a2a3c26bb07caaf63e9e.gif

球点赞

6a85ba44ff07a2a3c26bb07caaf63e9e.gif

球在看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值