bean工厂和ApplicationContext

Posted 晴天小猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bean工厂和ApplicationContext相关的知识,希望对你有一定的参考价值。

获取bean的两种方法
1. 从applicationcontext 应用上下文容器中获取
2. 从bean 工厂获取 bean 的区别
 
使用ApplicationContext 获取bean的例子
 
我们定义一个Student 类,然后让spring去调用它
Student.java
package com.getBean;
 
/**
* Created by admin on 2017/12/9.
*/
public class Student {
private String name;
private int age;
private int id;
 
public String getName() {
return name;
}
 
public void setName(String name) {
this.name = name;
System.out.print(name);
}
 
public int getAge() {
return age;
}
 
public void setAge(int age) {
this.age = age;
}
 
public int getId() {
return id;
}
 
public void setId(int id) {
this.id = id;
}
}
 
// 把Student 类加入到spring配置文件,
<bean id="student" class="com.getBean.Student">
<property name="name">
<value>胖子哟</value>
</property>
<property name="age">
<value>1</value>
</property>
<property name="id">
<value>1</value>
</property>
</bean>
 
// 通过ApplicationContext 调用bean
package com.getBean;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.core.io.ClassPathResource;
 
/**
* Created by admin on 2017/12/9.
* 介绍两种获取bean的方式 与其他们的不同
* 1. 从ApplicationContext 容器上下文获取bean
* 2. 从BeanFactory 获取bean
*/
public class runGetBean {
public static void main(String[] args){
// 1、通过ApplicationContext获取bean
// 当我们调用 new ClassPathXmlApplicationContext 则spring配置文件中的bean 就会被实例化 该bean的scope 是singleton 单实例的
ApplicationContext app = new ClassPathXmlApplicationContext("com/getBean/beans.xml");
app.getBean("student");
 
}
}
 
这种方式获取bean 则在创建 ApplicationContext 实例时会自动实例化配置文件中的所有bean
 
2. 使用bean 工厂来获取bean
 
package com.getBean;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.core.io.ClassPathResource;
 
/**
* Created by admin on 2017/12/9.
* 介绍两种获取bean的方式 与其他们的不同
* 1. 从ApplicationContext 容器上下文获取bean
* 2. 从BeanFactory 获取bean
*/
public class runGetBean {
public static void main(String[] args){
// 1、通过ApplicationContext获取bean
// 当我们调用 new ClassPathXmlApplicationContext 则spring配置文件中的bean 就会被实例化 该bean的scope 是single 单实例的
// ApplicationContext app = new ClassPathXmlApplicationContext("com/getBean/beans.xml");
// app.getBean("student");
// 通过bean 工厂来获取bean
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("com/getBean/beans.xml"));
factory.getBean("student");
}
}
 
使用bean工厂时则是只有你调用了getBean 方法时,bean实例才会被创建
 
在大部分的项目开发中都是使用ApplicationContext方式获取bean, 因为它可以提前加载,速度较快
而在移动设备中则多数使用bean工厂,因为其节约内存
 
总结: 如果使用ApplicationContext 则配置的bean 如果是singleton 不管你是否使用,都会被实例化,好处是可以预先加载,坏处是浪费内存
如果是使用BeanFactory 则配置的bean 不会被马上实例化,当你使用的时候才会被实例化,好处是节约内存
一般如果没有特殊要求,则应该使用ApplicationContext
 
 
 
 

以上是关于bean工厂和ApplicationContext的主要内容,如果未能解决你的问题,请参考以下文章

创建在类路径资源[applicationcontext]中定义名为“工厂”的bean时出错。:在设置bean属性“dataSource”时,无法解析对bean“dataSource”的引用;嵌套异常是

BeanFactory 和 ApplicationContext

BeanFactory和ApplicationContext

Beanfactory与ApplicationContext

spring 的工厂类

java框架入门书籍,实战篇