Spring框架笔记-理解Spring容器、BeanFactory以及ApplicationContext

1.Spring容器

Spring容器可以理解为生产对象(OBJECT)的地方,在这里容器不只是帮我们创建了对象那么简单,它负责了对象的整个生命周期–创建、装配、销毁。而这里对象的创建管理的控制权都交给了Spring容器,所以这是一种控制权的反转,称为IOC容器,而这里IOC容器不只是Spring才有,很多框架也都有该技术。

2.BeanFactory和ApplicationContext之间的关系

BeanFactory和ApplicationContext是Spring的两大核心接口,而其中ApplicationContext是BeanFactory的子接口。它们都可以当做Spring的容器,Spring容器是生成Bean实例的工厂,并管理容器中的Bean。在基于Spring的Java EE应用中,所有的组件都被当成Bean处理,包括数据源,Hibernate的SessionFactory、事务管理器等。
生活中我们一般会把生产产品的地方称为工厂,而在这里bean对象的地方官方取名为BeanFactory,直译Bean工厂(com.springframework.beans.factory.BeanFactory),我们一般称BeanFactory为IoC容器,而称ApplicationContext为应用上下文。
Spring的核心是容器,而容器并不唯一,框架本身就提供了很多个容器的实现,大概分为两种类型:
一种是不常用的BeanFactory,这是最简单的容器,只能提供基本的DI功能;
一种就是继承了BeanFactory后派生而来的ApplicationContext(应用上下文),它能提供更多企业级的服务,例如解析配置文本信息等等,这也是ApplicationContext实例对象最常见的应用场景。

3.BeanFactory详情介绍

Spring容器最基本的接口就是BeanFactory。BeanFactory负责配置、创建、管理Bean,它有一个子接口ApplicationContext,也被称为Spring上下文,容器同时还管理着Bean和Bean之间的依赖关系。
spring Ioc容器的实现,从根源上是beanfactory,但真正可以作为一个可以独立使用的ioc容器还是DefaultListableBeanFactory,因此可以这么说,
DefaultListableBeanFactory 是整个spring ioc的始祖。
在这里插入图片描述
接口介绍:
1.BeanFactory接口
 是Spring bean容器的根接口,提供获取bean,是否包含bean,是否单例与原型,获取bean类型,bean 别名的方法 。它最主要的方法就是getBean(String beanName)。
2.BeanFactory的三个子接口:
 * HierarchicalBeanFactory:提供父容器的访问功能
 * ListableBeanFactory:提供了批量获取Bean的方法
 * AutowireCapableBeanFactory:在BeanFactory基础上实现对已存在实例的管理
3.ConfigurableBeanFactory
主要单例bean的注册,生成实例,以及统计单例bean
4.ConfigurableListableBeanFactory
继承了上述的所有接口,增加了其他功能:比如类加载器,类型转化,属性编辑器,BeanPostProcessor,作用域,bean定义,处理bean依赖关系, bean如何销毁…
5.实现类DefaultListableBeanFactory详细介绍:
实现了ConfigurableListableBeanFactory,实现上述BeanFactory所有功能。它还可以注册BeanDefinition。
下面,我们使用Spring配置文件对Car提供配置信息,然后通过BeanFactory装载配置文件,启动Spring IoC容器:

public class BeanFactoryTest {
	public static void main(String[] args)throws Throwable{
		ResourcePatternResolver resolver=new PathMatchingResourcePatternResolver();
		Resource res=resolver.getResource("classpath:com/baobaotao/beanfactory/beans.xml");
		BeanFactory bf=new XmlBeanFactory(res);//res里包含了Spring的配置信息,并创建了容器
		System.out.println("init BeanFactory");
		Car car=bf.getBean("car",Car.class);//通过BeanFactory#getBean(beanName)方法从IoC容器中获取Bean
		System.out.println("car bean is ready for use!");
	}
}

4.ApplicationContext详情介绍

如果说BeanFactory是Sping的心脏,那么ApplicationContext就是完整的身躯了。
ApplicationContext常用实现类:
AnnotationConfigApplicationContext 从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式。
ClassPathXmlApplicationContext 从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式。
FileSystemXmlApplicationContext 从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件。
AnnotationConfigWebApplicationContext 专门为web应用准备的,适用于注解方式。
XmlWebApplicationContext 从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。
Spring具有非常大的灵活性,它提供了三种主要的装配机制:

1.在XMl中进行显示配置
2.在Java中进行显示配置
3.隐式的bean发现机制和自动装配
组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean。
自动装配(autowiring):Spring自动满足bean之间的依赖。
(使用的优先性: 3>2>1)尽可能地使用自动配置的机制,显示配置越少越好。当必须使用显示配置bean的时候(如:有些源码不是由你来维护的,而当你需要为这些代码配置bean的时候),推荐使用类型安全比XML更加强大的JavaConfig。最后只有当你想要使用便利的XML命名空间,并且在JavaConfig中没有同样的实现时,才使用XML。

除了提供BeanFactory所支持的所有功能外ApplicationContext还有额外的功能
1.默认初始化所有的Singleton,也可以通过配置取消预初始化。
2.继承MessageSource,因此支持国际化。
3.资源访问,比如访问URL和文件。
4.事件机制。
5.同时加载多个配置文件。
6.以声明式方式启动并创建Spring容器。
下面,我们使用Spring配置文件对Car提供配置信息,AnnotationConfigApplicationContext将加载Bean.class中Bean定义。

public class AnnotationApplicationContext{
	public static void main(String args[]){
		ApplicationContext ctx=new AnnotationConfigApplicationContext(Bean.class);
		Car car=ctx.getBean("car",Car.class);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值