首先我们需要了解一下是什么是IoC。IoC是Spring的核心技术之一,全称是Inversion of Control(控制反转)。最原始的创建对象的方法就是通过new来实现(手动的编写代码实现),而Spring提供了Ioc容器用于对象的创建以及配置、管理、销毁等。
容器启动的时候,读取配置文件,基于配置文件的信息初始化(创建)对象。容器一启动就创建对象的好处是:使用的时候就不用创建了,直接从容器中获取比使用时创建性能好。弊端是:不使用对象但是创建了对象,占用内存。
newHollow();
当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象,这样做降低了类之间的耦合程度。不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
一、容器?
从程序的角度,容器实际上就是某些特定接口的实现类的实例。spring容器可归为两类:
BeanFactory容器:bean工厂(org.springframework.beans.factory.BeanFactory), 提供简单DI支持ApplicationContext容器:应用上下文(org.springframework.context.ApplicationContext),基于BeanFactory构建,并提供框架服务,如配置解析,主流使用的是功能更加强大的应用上下文(ApplicationContext)
二、Spring BeanFactory 容器
BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。ApplicationContext接口,它由BeanFactory接口派生而来,ApplicationContext包含BeanFactory的所有功能,通常建议比BeanFactory优先。
代码:
public interface BeanFactory {String FACTORY_BEAN_PREFIX = "&";Object getBean(String var1) throws BeansException;<T> T getBean(String var1, Class<T> var2) throws BeansException;Object getBean(String var1, Object... var2) throws BeansException;<T> T getBean(Class<T> var1) throws BeansException;<T> T getBean(Class<T> var1, Object... var2) throws BeansException;<T> ObjectProvider<T> getBeanProvider(Class<T> var1);<T> ObjectProvider<T> getBeanProvider(ResolvableType var1);boolean containsBean(String var1);boolean isSingleton(String var1) throws NoSuchBeanDefinitionException;boolean isPrototype(String var1) throws NoSuchBeanDefinitionException;boolean isTypeMatch(String var1, ResolvableType var2) throws NoSuchBeanDefinitionException;boolean isTypeMatch(String var1, Class<?> var2) throws NoSuchBeanDefinitionException;@NullableClass<?> getType(String var1) throws NoSuchBeanDefinitionException;String[] getAliases(String var1);}
getBean方法:从容器中获取Bean对象is方法:bean类型的判断get方法:获取Bean类型和别名
三、ApplicationContext 的主要实现类
ClassPathXmlApplicationContext:从 类路径下加载配置文件FileSystemXmlApplicationContext: 从文件系统中加载配置文件ConfigurableApplicationContext:扩展于ApplicationContext,新增加两个主要方法:refresh() 和 close(), 让ApplicationContext 具有启动、刷新和关闭上下文的能力ApplicationContext:在初始化上下文时就实例化所有单例的 Bean。WebApplicationContext: 是专门为 WEB 应用而准备的,它允许从相对于 WEB 根目录的路径中完成初始化工作直白一点,就是五种常见加载方式 Application context = new 某种Context(参数传资源位置: 如"a.b.c.class" / "F:/config.xml" / "config.xml" 等等)
如果觉得《Spring框架—IoC容器》对你有帮助,请点赞、收藏,并留下你的观点哦!