Bean工厂和ApplicationContext上下文
bean工厂介绍:从applicationContext应用上下文容器获取bean和从bean工厂r容器中获取bean有什么区别: applicationContext中获取: ApplicationContext ac=new ClassPathXmlApplication("com/sjy/beans.xml"); //当我们去实例化beans.xml,该文件中配置的bean被实例(该bean scope是singleton) //从bean中取出student ac.getBean("student"); BeanFactory 中获取:
//如果我们使用beanfactory去获取bean,当你只是实例化该容器,那么容器的bean不被实例化,只有当你去使用getBeanm某个bean时,才会实 时的创建。 BeanFactory factory=new XmlBeanFactory(new ClassPathResource("com/sjy/beans.xml")); factory.getBean("student");
结论: 1 :如果使用ApplicationContext,则配置的bean如果是singleton不管你用不用,都被实例化(好处就是可以预先加载,缺点就是耗内存) 2:如果是BeanFactory,则当你实例化该对象时候,配置的bean不会被马上实例化,当你使用的时候,才会实例(好处节约内存,缺点就是速度) 3:规定;一般都是使用ApplicationContext bean的作用域:scope singleton: 每次都创建对象;不配置scope时,为默认. prototype: 延迟加载; 下面三个是在web端使用: request: session: global-session
上下文的实现: 1,ClassPathXmlApplication : 默认为项目的classpath下相对路径 ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
2, FileSystemXmlApplication : 默认为项目工作路径 即项目的根目录 ApplicationContext ac = new FileSystemXmlApplicationContext("src/main/resources/beans.xml");