Spring核心概念主要包含IOC/DI、IOC容器和Bean
什么是控制反转(IOC)?
使用对象时,由自己亲手new对象到交给外部帮助我们提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。
Spring和IOC之间的关系是什么?
Spring提供了一个容器,称为IOC容器,用来充当IOC思想中的"外部"
IOC容器的作用以及内部存放的是什么?
IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IOC容器中统称为Bean
当IOC容器中创建好service和dao对象后,程序能正确执行吗?
不行,因为service运行需要依赖dao对象,需要把dao对象交给service,也就是说要绑定service和dao对象之间的关系,在容器中建立对象与对象之间的绑定关系就要用到DI(依赖注入)。
5.什么是依赖注入?
在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
Spring到底是如何来实现IOC和DI的?
**需求:**将BookServiceImpl和BookDaoImpl交给Spring管理,从容器中获得对应bean对象进行方法调用
步骤:
1.创建maven项目

2.添加Spring依赖
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.2.10.RELEASEversion>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
dependency>
dependencies>
3.添加案例中需要的类

BookDaoImpl、BookDao、BookServiceImpl、BookService
package com.itheima.dao.impl;
import com.itheima.dao.BookDao;
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
}
package com.itheima.dao;
public interface BookDao {
public void save();
}
package com.itheima.service.impl;
import com.itheima.dao.BookDao;
import com.itheima.service.BookService;
public class BookServiceImpl implements BookService {
//5.删除业务层中使用new的方式创建的dao对象,通过set方法获取
private BookDao bookDao;
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
//6.提供对应的set方法
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
}
package com.itheima.service;
public interface BookService {
public void save();
}
4.添加Spring配置文件,在resourse目录下创建

同时实现 DI依赖注入

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" name="bookEbi" class="com.itheima.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
bean>
beans>
6.获取IOC容器bean并实现方法调用
package com.itheima;
import com.itheima.dao.BookDao;
import com.itheima.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
//3.获取IoC容器 要想拿bean先拿容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//4.获取bean(根据bean配置id获取)这里需要强转为接口类型而不是对象类型,因为接口中存在方法
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
bookDao.save();
//将对象类型转换为接口
BookService bookService = (BookService) ctx.getBean("bookEbi");
bookService.save();
}
}

关于bean的基础配置

scope定义当前的bean是单例还是非单例,单例的话创建好一个对象可以实现复用,不用销毁,默认是单例。
ps:参考哔哩哔哩黑马程序员spring网课教程~