获取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