- BeanFactory和ApplicationContext的区别
BeanFactory是Spring Framework中最基础的IOC容器,用于创建和管理应用中的Bean对象,提供对依赖注入(DI)和面向切面编程(AOP)的基本支持。
ApplicationContext是一个高级的IOC容器,它扩展了BeanFactory,并提供了更多的企业级功能,如国际化、事件传播、资源管理、Web应用程序上下文和应用程序层次结构、事务管理,各种数据源的集成等。
因此,BeanFactory主要实现Bean对象的创建和管理,而ApplicationContext除了BeanFactory的基本功能,还拓展了一些高级的功能。
- BeanFactory和ApplicationContext的作用
(1) BeanFactory
BeanFactory的主要作用是用于管理应用中的Bean对象,提供对依赖注入(DI)和面向切面编程(AOP)的基本支持。
创建BeanFactory对象方式:
Resource resource = new ClassPathResource("spring.xml");
BeanFactory factory = new XmlBeanFactory(resource);
(2) ApplicationContext
ApplicationContext提供了更多的企业级功能,如国际化、事件传播、资源管理、Web应用程序上下文和应用程序层次结构、事务管理,各种数据源的集成等。
创建ApplicationContext对象方式:
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
- BeanFactory和ApplicationContext的区别示例
以下示例演示了BeanFactory和ApplicationContext在创建对象时的差异:
// 创建BeanFactory
Resource resource = new ClassPathResource("spring.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);
// 通过BeanFactory获取User对象
User user1 = (User)beanFactory.getBean("userBean");
System.out.println(user1);
// 创建ApplicationContext
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
// 通过ApplicationContext获取User对象
User user2 = (User)context.getBean("userBean");
System.out.println(user2);
在上述示例中,BeanFactory创建了一个XmlBeanFactory对象,用于管理Spring配置文件中定义的Bean对象;ApplicationContext创建了一个ClassPathXmlApplicationContext对象,同样用于管理Spring配置文件中定义的Bean对象。
在获取User对象时,两者的调用方式是相同的,但是BeanFactory仅在请求时初始化Bean对象,而ApplicationContext会在应用启动时提前初始化Bean对象。
因此,在相同的配置文件下,运行上述示例两次时,BeanFactory会创建两个不同的User对象,而ApplicationContext只会创建一个User对象。
- BeanFactory和ApplicationContext的作用示例
以下示例演示了ApplicationContext在集成MyBatis框架时的作用:
// 创建ApplicationContext
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
// 从ApplicationContext获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = (SqlSessionFactory)context.getBean("sqlSessionFactory");
// 创建MyBatis的SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
// 从数据库中获取User对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.selectUserByID(1);
System.out.println(user);
} finally {
sqlSession.close();
}
在上述示例中,ApplicationContext提供了获取SqlSessionFactory对象的功能,进而创建MyBatis的SqlSession对象。同时,通过调用SqlSession对象的getMapper方法,实现了在数据库中查询User对象的功能。
因此,ApplicationContext在集成第三方框架时,可以提供依赖注入的功能,让应用更加灵活和高效。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring中BeanFactory和ApplicationContext的作用和区别(推荐) - Python技术站