解释依赖注入
不需要再硬编码直接调用组装组件和服务,而是在配置文件里定义、描述组件服务及其依赖关系,之后由容器(IOC容器)负责组件和服务的加载、生成、初始化、组装、分发、销毁等管理。
Spring注入方式
- 接口注入 (接口方式注入,实现多态)
- 属性注入(属性的SET/GET,实现可选依赖)
- 构造注入(构造方法注入,实现强制依赖)
使用构造函数依赖注入时,Spring保证所有一个对象所有依赖的对象先实例化后,才实例化这个对象。
使用set方法依赖注入时,Spring首先实例化对象,然后才实例化所有依赖的对象。
当设值注入与构造注入同时存在时,先执行构造注入,再执行设值注入。
Spring框架中的IoC
- Spring中的 org.springframework.beans 包和 org.springframework.context包构成了Spring框架IoC容器的基础。
- BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能
- ApplicationContex接口对BeanFactory(是一个子接口)进行了扩展,在BeanFactory的基础上添加了其他功能,比如与Spring的AOP更容易集成,也提供了处理message resource的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对Web应用的WebApplicationContext。
- org.springframework.beans.factory.BeanFactory 是Spring IoC容器的具体实现,用来包装和管理前面提到的各种bean。BeanFactory接口是Spring IoC 容器的核心接口。
BeanFactory和ApplicationContext有什么区别
- BeanFactory和ApplicationContext都是接口,并且ApplicationContext是BeanFactory的子接口。
- BeanFactory可以理解为含有bean集合的工厂类.BeanFactory包含了bean定义、bean关联关系的设置、根据请求分发bean、bean生命周期的控制的功能
- application context扩展了BeanFactory,还提供了其他的功能。
- 国际化的功能
- 消息发送、响应机制(继承至MessageSource )
- 统一加载资源的功能(继承至ResourceLoader)
- 强大的事件机制( 继承至ApplicationEventPublisher)
- 对Web应用的支持()
- 它们的加载方式不同:
- BeanFactory采用的是延迟加载的形式来注入Bean,即只有在使用某个bean的时候,才对该Bean进行加载实例化.好处是节约内存,缺点是速度比较慢.
- ApplicationContext则相反的,它是在Ioc容易启动时就一次性创建所有的Bean,这样的好处是可以马上发现Spring配置文件中的错误;坏处就是浪费内存。
- 以下是三种较常见的 ApplicationContext 实现方式:
1、ClassPathXmlApplicationContext:从classpath的XML配置文件中读取上下文,并生成上下文定义.应用程序上下文从程序环境变量中取得.
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
2、FileSystemXmlApplicationContext :由文件系统中的XML配置文件读取上下文。
ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml");
3、XmlWebApplicationContext:由Web应用的XML文件读取上下文。
IoC对象容器
所有的对象都必须创建;或者说:使用对象之前必须先创建。而使用ioc之后,你就可以不再手动创建对象,而是由ioc容器帮我们实现对象的创建、注入等过程。