spring面试题之——控制反转(IOC)
什么是spring ioc容器?
spring框架的核心是spring容器。容器创建对象,将他们装配在一起,配置它们并管理它们的完整生命周期。spring容器使用依赖注入来管理组成应用程序的组件。容器通过读取配置的配置元数据来接受对象进行实例化,装配和组装的指令。该元数据可以通过XML、java注解或者是java代码提供。
什么是依赖注入?
在依赖注入中,您不必创建对象,但必须描述如何创建它们。您不是直接在代码中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由IOC容器将他们装配在一起。
可以通过多少种方式完成依赖注入?
通常有三种:
1、构造器注入
2、setter方法注入
3、接口注入
在spring framework中,仅使用构造器注入二号setter注入。
区分构造器注入和setter注入
spring中有多少种ioc容器?
BeanFactory:就像一个包含bean集合的工厂类。它会在客户端要求时实例化bean。
ApplicationContext:ApplicationContext接口扩展了BeanFactory接口。它在BeanFactory基础上提供了一些额外的功能。
区分BeanFactory和ApplicationContext
列举一些Ioc的好处
它将最小化应用程序中的代码量。
它将使应用程序易于测试,因为它不需要单元测试用例中任何单例或者JNDI查找机制。
它以最小的影响和最少的侵入机制促进松耦合。
它支持即时的实例化和延迟加载服务。
spring ioc的实现机制
spring中的Ioc的实现原理就是工厂模式和反射机制。
//简单示例 public interface Fruit { void eat(); } public class Apple implements Fruit { public void eat() { System.out.println("Apple"); } } public class Orange implements Fruit { public void eat() { System.out.println("Orange"); } }
public class Factory { public static Fruit getInstance(String ClassName) { Fruit f = null; try { f = (Fruit) Class.forName(ClassName).newInstance(); } catch (Exception e) { e.printStackTrace(); } return f; } }
public class Client { public static void main(String[] a) { Fruit f = Factory.getInstance("..."); if (f != null) { f.eat(); } } }