zoukankan      html  css  js  c++  java
  • spring学习(3)

    bean的声明周期

    为什么把生命周期当做一个重点?

    Servlet->servlet生命周期

    Servlet生命周期分为三个阶段: 
    1:初始化阶段,调用init()方法 
    2:响应客户请求阶段,调用service()方法 
    3:终止阶段,调用destory()方法

    bean的生命周期

    ①实例化(当我们的程序加载beans.xml文件),把我们的bean(前提是scope=singleton)实例化到内存中

    ②调用set方法设置属性。

    ③如果你实现了bean名字关注接口(BeanNameAware)则,可以通过setBeanName获取id号

    ④如果i实现了bean工厂关注接口,则(BeanFactoryAware)可以获取beanFactory。

    ⑤如果你实现了ApplicationContextAware接口,则调用方法:

    public void setApplicationContext(ApplicationContext arg0)
                throws BeansException {
            System.out.println("ApplicationContextAware" + arg0);
        }

    ⑥如果bean和一个后置处理器关联了,则会自动去调用before方法

    public Object postProcessAfterInitialization(Object arg0, String arg1)
                throws BeansException {
            System.out.println("postProcessAfterInitialization方法被调用");
            return arg0;
        }

    ⑦如果实现了InitializingBean接口,则会调用postProcessBeforeInitialization()方法

    ⑧如果自己在<bean init-method="init"/> 则可以在bean中定义自己的初始化方法

    ⑨如果bean和一个后置处理器关联了,则会自动去调用方法postProcessAfterInitialization()方法

    ⑩使用我们的bean

    11.容器关闭

    12可以通过实现DisposableBean接口来调用destroy

    13.可以在<bean destroy-method=""/>调用定制的销毁方法。

    小结:在实际开发中,往往没有用到这么多的过程,常见的是:

    1->2->6->9->10->11

    如果需要关闭特定的资源,可以使用13.

    需求:

    1.记录每个对象,被实例化的实际

    2.过滤每个调用对象Ip

    3.给所有对象添加属性,或者函数,=>aop(面向切面编程,针对所有对象编程)

     aop初探:

    beans.xml中有两个bean。所以输出如下所示:

     问题:通过BeanFactory来获取bean对象,bean的生命周期是否和ApplicationContext获取的bean的一样?

    不一样,没有ApplicationContextAware...,bean在工厂中创建的生命周期会简单一些。

  • 相关阅读:
    关于OC中.m文件下实现私有变量的方法,在.h文件下实现公有变量的方法
    mac中安装homebrew
    ios架构
    github命令记录
    Unity 游戏框架搭建 MonoBehaviour单例的模板
    Unity 游戏框架搭建 单例的模板
    unity 单列
    简单工厂与工厂
    NGUI动态播放视频
    在一个GameObject上进行多个AudioSource的控制
  • 原文地址:https://www.cnblogs.com/liaoxiaolao/p/9885223.html
Copyright © 2011-2022 走看看