• 三:ApplicationContex 应用上下文容器


      从ApplicationContex 应用上下文容器中获取bean和从bean工厂容器中获取bean

    具体案例:

     1 //从ApplicationContext中取bean
     2 ApplicationContext ac=new ClassPathXmlApplicationContext("com/hsp/ioc/beans.xml");
     3 //当我们去实例化beans.xml,该文件中配置的bean被实例(该bean scope是 singleton)从bean中取出student
     4         
     5         
     6         //如果我们使用beanfactory去获取bean,当你只是实例化该容器, 那么
     7         //容器的bean不被实例化,只有当你去使用getBean某个bean时,才会实时的创建.
     8         
     9         BeanFactory factory = new XmlBeanFactory(
    10                 new ClassPathResource("com/hsp/ioc/beans.xml"));
    11         factory.getBean("student");

    结论:

    1.如果使用ApplicationContext ,则配置的bean如果是 singlton不管你用不用,都被实例化.(好处就是可以预先加载,缺点就是耗内存)

    2.如果是 BeanFactory ,则当你获取beanfacotry时候,配置的bean不会被马上实例化,当你使用的时候,才被实例(好处节约内存,缺点就是速度)

    3.规定: 一般没有特殊要求,应当使用ApplicatioContext完成(90%)

    bean 的  scope的细节

    1 //入门案例:
    2 //获取两个student
    3         Student s1=(Student) ac.getBean("student");
    4         Student s2=(Student) ac.getBean("student");
    5         System.out.println(s1+" "+s2);

     三种获取ApplicationContext 对象引用的方法

    1. ClassPathXmlApplicationContext -> 通过类路径
    2. FileSystemXmlApplicationContext -> 通过文件路径

    举例:

    1 ApplicationContext ac=new FileSystemXmlApplicationContext("文件路径beans.xml / applicationContext.xml");

         3.XmlWebApplicationContext

      bean的生命周期

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

    ②     调用set方法设置属性

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

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

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

     1 //该方法传递ApplicationContext
     2 
     3        public void setApplicationContext(ApplicationContext arg0)
     4 
     5                      throws BeansException {
     6 
     7               // TODO Auto-generated method stub
     8 
     9               System.out.println("setApplicationContext"+arg0);
    10 
    11              
    12 
    13        }

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

    ⑦     如果你实现InitializingBean 接口,则会调用 afterPropertiesSet

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

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

    ⑩     使用我们的bean

    11. 容器关闭

    12. 可以通过实现DisposableBean 接口来调用方法 destory

    13. 可以在<bean destory-method=”fun1”/> 调用定制的销毁方法

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

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

  • 相关阅读:
    前端有关请求的相关内容axios
    有关浏览器异步请求数据的跨域问题
    Java环境的配置
    Css3中有关的 @media 媒体查询相关的知识
    Vue中实现异步加载的组件进行分割介绍
    Less的相关知识
    Vue框架中有关 computed的相关知识
    vue中如何在子组件添加类似于watch属性监听父组件数据,数据变化时子组件做出相应的动作
    JS的有关递归的知识点(数据无限级联的实现)
    JS中有关闭包的相关内容及介绍
  • 原文地址:https://www.cnblogs.com/feimo/p/3090508.html
Copyright © 2020-2023  润新知