7.Spring-Bean的获取

本文最后更新于2023.11.30-17:26,某些文章具有时效性,若有错误或已失效,请在下方留言或联系涛哥

1.Spring容器的体现

顶层接口为BeanFactory,我们在开发当中更多的会使用ApplicationContext接口。

2.BeanFactory的使用

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("ApplicationContext.xml"));

通过调用getBean方法可以获取到spring容器管理的bean

BeanFactory里面通过getBean获取bean实例,先来看一下getBean的几个重载:

getBean(String name)

getBean(Class<T> requiredType)

getBean(String name, Class<T> requiredType)

getBean(String name, Object... args)

User user=beanFactory.getBean(User.class);
​
User user=beanFactory.getBean("user",User.class);
​
User user=(User)beanFactory.getBean("user");

3.使用ApplicationContext接口 

ApplicationContext context=new ClassPathXmlApplicationContext("ApplicationContext.xml");

实现类:

  • ClassPathXmlApplicationContext

    //单个配置文件 
    ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
    //多个配置文件 
    String[] locations = {"bean1.xml","bean2.xml",...}
    ApplicationContext context=new ClassPathXmlApplicationContext(locations)
  • FileSystemXmlApplicationContext (需要写完整的路径)

    //单个配置文件
    ApplicationContext context=new FileSystemXmlApplicationContext("bean.xml");
    //多个配置文件
    String[] locations = {"bean1.xml","bean2.xml",...}
    ApplicationContext context=new FileSystemXmlApplicationContext(locations);
  • WebXmlApplicationContext

    4.BeanFactory和ApplicationContext接口的区别:

    • BeanFactory 会采取 延迟加载,只有在真正获取bean时,才会完成bean的实例化
    • ApplicaionContext 会在配置加载时,就完成单例bean的实例化。

    区别:在实际开发更多的使用ApplicationContext接口,会导致项目在启动的时候,消耗较多的资源和时间,而在项目工作时  获取bean会更加快速。

    5.Bean的作用域:

    在bean中 加入scope属性

     默认值为:singleton 表示单例模式,在Spring容器中,只有一个该bean的实例。
    ​
     prototype 表示多例模式,在每一次取获取bean的时候,会返回一个新的实例。
    ​
     request 用于在web开发当中,将bean存在request域中。
     request.setAttribute();
    ​
     session 用于在web开发当中,将bean存在session域中。 
     session.setAttribute();

    PS:在开发当中使用最多的是 singleton和prototype。

    如果在开发中多次实例化了 spring容器,那么每个容器单独管理自己容器内部的bean,通常在web项目中,Spring容器只会初始化一次。
    如何通过bean 去获取容器:
    1.给bean 实现 ApplicationContextAware 接口
    2.重写接口要求的方法
    阅读剩余
    THE END