- FileSystemXmlApplicationContext——使用文件系统导入配置
- ClassPathXMLApplicationContext——使用xml文件导入配置
- AnnotationConfigApplicationContext——使用注解导入配置信息
二. 两大重要API:
- BeanFactory——定义bean的工厂接口
在资源缺乏年代,没将一个bean放入spring容器中时,容器是不会创建对象的,只有在需要使用到这个对象时才会创建这个对象,目的是节约资源。问题是使用过程中会耗时,体验差。 - ApplicationContext——在beanFactory的基础上进行了扩展
资源在不断更新,内存不在缺乏,一个对象存放在内存中不会对内存产生影响,当spring容器启动时,就会创建所有在容器中的对象(多例除外),使项目访问速率提高。
三. FactoryBean的使用
SessionFactory
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.beans.factory.FactoryBean;
/**
* 获取SqlSession对象
*/
public class SessionFactory implements FactoryBean {
@Override
public Object getObject() throws Exception {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
@Override
public Class<?> getObjectType() {
return SqlSession.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<bean id="session" class="com.gh.factory.SessionFactory"></bean>
</beans>
测试
@Test
public void getSession(){
ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext03.xml");
SqlSession session = ioc.getBean("session", SqlSession.class);
System.out.println(session);
}
四. BeanFactory和FactoryBean
- BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean。
- 在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。