什么是spring ioc容器?
spring框架的核心是spring容器。容器创建对象,将他们装配在一起,配置它们并管理它们的完整生命周期。spring容器使用依赖注入来管理组成应用程序的组件。容器通过读取配置的配置元数据来接受对象进行实例化,装配和组装的指令。该元数据可以通过XML、java注解或者是java代码提供。
什么是依赖注入?
在依赖注入中,您不必创建对象,但必须描述如何创建它们。您不是直接在代码中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由IOC容器将他们装配在一起。
可以通过多少种方式完成依赖注入?
通常有三种:
1、构造器注入
2、setter方法注入
3、接口注入
在spring framework中,仅使用构造器注入二号setter注入。
区分构造器注入和setter注入
https://www.cnblogs.com/Jason-Xiang/p/5345342.html
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();
}
}
}