SpringIOC的出现:
Student student = new Student();
student.setXxx();
方式一:【逐个创建对象】
此种方式 创建对象new非常零散,造成后期维护较为麻烦。
方式二:【使用简单工厂】
通过简单工厂,可以将创建课程new集中起来操作,方便后期的维护。
但是, 还需要自己写中间的工厂
方式三:【使用StringIOC容器】
提供了中间的超级工厂,其中可以容纳任何对象。
好处:
IOC:控制反转
反转的是,获取对象的方式。
(之前是需要自己new对象,现在只需要向IOC容器中拿即可;
即从自己产生反转成直接获取)
为了更加清晰的理解IOC,IOC在一次大会上更名为DI(依赖注入)。
IOC(控制反转)也可以称之为DI(依赖注入):
控制反转:将创建对象、属性值 的方式 进行了反转,
从new、setXxx() 反转为了 从SpringIOC容器中getBean();
依赖注入:将属性值 注入给了属性,
将属性 注入给了bean,
将bean 注入给了IOC容器;
总结:
IOC/DI, 无论要什么对象,都可以直接去SpringIOC容器中获取,而不需要自己操作(new\setXxx())。
*******因此IOC容器使用分为2步:1.先在SpringIOC容器中存放对象并赋值;
2.从容器中拿;
注:
从IOC中获取对象时,返回的是Object对象,获取后需要强转。
如:
实体类Student中的方法:
//若name="javaCourse"
public void learn2(String name){
//获取IOC容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取容器中的ICourse类型的对象---JavaCourse实现了ICourse接口类
ICourse course = (ICourse)context.getBean(name);
//调用对象中的方法
course.learn();
}